正如标题所指定的那样,我有一个旅行列表--一次旅行有一张机票列表,每一张机票都连接到一个客户。
我想比较每个票务客户id和我的可变客户id,以便只获得该客户的机票,而且我也希望有一个该客户有机票的旅行列表。
Customer customer = db.Customers.FirstOrDefault(u => u.UserId.Equals(user.Id));
List<Ticket> Tickets = new List<Ticket>();
List<Trip> Trips = new List<Trip>();
foreach (Trip trip in db.Trips)
{
trip.Tickets.ForEach(ticket =>
{
if (ticket.Customer.UserId == customer.UserId)
{
Tickets.Add(ticket); //Add the trip to Trips
}
}
);
}我想要的代码,但不能让它起作用
Trips = db.Trips.Select(trip => trip.Tickets.FirstOrDefault(ticket =>
{
if (ticket.Customer.UserId == customer.UserId)
{
Tickets.Add(ticket);
}
})).ToList();发布于 2017-03-17 16:43:55
像下面这样的东西应该有效
List<Trip> trips = db.Trips.ToList();
List<Ticket> tickets = new List<Ticket>()
trips.ForEach(p => tickets.AddRange(p.Tickets.Where(q => q.Customer.UserId == customer.UserId)));编辑--如果你想得到一张顾客的旅行清单,然后是一张机票清单,我会稍微换一种方式:
//get a list of customer trips
List<Trip> trips = db.Tickets.Where(p => p.Customer.UserId == customer.UserId).Select(q => q.Trip).ToList();
List<Ticket> tickets = trips.select(p => p.Tickets.Where(q => q.Customer.UserId == customer.UserId).ToList()).ToList();
//or if you're not bothered about hitting the db again:
//List<Ticket> tickets = db.Tickets.Where(p => p.Customer.UserId == customer.UserId).ToList();发布于 2017-03-17 16:54:08
var tickets = db.Trips
.SelectMany(trip => trip.Tickets)
.Where(ticket => ticket.Customer.UserId == customer.UserId)
.ToList();像这样吗?
发布于 2017-03-17 17:22:07
要只获得,您的客户拥有的票:
List<Ticket> tickets = db.Tickets
.Where(t => t.Customer.UserId == customer.UserId)
.ToList();要获得所有Trips,您的客户至少有一张票:
List<Trip> trips= db.Trips
.Where(t => t.Tickets.Any(ti => ti.Customer.UserId == customer.UserId))
.ToList();不过,这是不会装船的。如果您也希望加载trips的票证,只需添加如下所示的Include():
List<Trip> trips= db.Trips.Include("Tickets")
.Where(t => t.Tickets.Any(ti => ti.Customer.UserId == customer.UserId))
.ToList();不需要查询Customer。
https://stackoverflow.com/questions/42862754
复制相似问题