我问过类似的问题,但这次我想使用Entity Framework。
我有两个表的数据库:Customers(Id PK,LastName,State等)和Orders(Id PK,CustomerId FK,ProductName,Price等)
我想只检索客户的最后订单的详细信息以及客户名称。 我开始时:
var orders = from o in db.Orders
where o.Customer.State == "NY"
select o;
var lastOrders = orders.
Where(x => x.Customer.Orders.Where(y=>!y.IsCancelled).
OrderByDescending(z => z.Id).First().Id == x.Id);
但我觉得这可能效率不高。
答案 0 :(得分:3)
你可以试试这个:
var query = from c in db.Customers
where c.State == "NY"
&& c.Orders.Any(o => !o.IsCancelled)
select new {
Name = c.Name,
Order = c.Orders.Where(o => !o.IsCancelled)
.OrderByDescending(o => o.Id).FirstOrDefault()
};
var customersWithLastOrder = query.ToList();
它为您提供了一个匿名类型的集合,其中包含客户的名称和最后一个订单。
修改强>
(Where(...).Count() > 0
替换为Any(...)
,感谢BritishDeveloper!)