2011-06-06 54 views
0

我問過類似的問題,但是這次我想使用實體框架。如何獲得帶有EF記錄的父母記錄最後的子女記錄

我有兩個表的數據庫:客戶(編號PK,姓氏,國家等)和訂單(編號PK,FK客戶編號,產品名稱,價格等)

我只想檢索客戶的最後訂單的詳細信息以及客戶名稱。 我開始:

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); 

但我覺得這可能不是有效的。

回答

2

你可以試試這個:

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

+0

+1這是最好的方式。但有幾個小問題:1)第3行--c.Orders.Any(o =>!o.IsCancelled)'和2)第7行 - '.OrderBy(o => i.Id).LastOrDefault()' – BritishDeveloper 2011-06-06 20:51:56

+0

@英國開發者:謝謝! Any'方法確實更好,我將編輯我的代碼。但是不幸的是'LastOrDefault()'在LINQ to Entities中不被支持,所以我們不能在這裏使用它。 – Slauma 2011-06-06 22:33:17

+0

啊好的。然後我們都學到了一些東西。尼斯互換:) – BritishDeveloper 2011-06-07 08:15:38