如何使用EF获取具有父记录的最后一个子记录

时间:2011-06-06 15:42:15

标签: .net entity-framework

我问过类似的问题,但这次我想使用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);

但我觉得这可能效率不高。

1 个答案:

答案 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!)