2012-09-09 48 views
4

我有以下查詢:的LINQ查詢的SelectMany

DateTime cutoffDate = new DateTime(1997, 1, 1); 

var orders = 
    from c in customers 
    where c.Region == "WA" 
    from o in c.Orders 
    where o.OrderDate >= cutoffDate 
    select new { c.CustomerID, o.OrderID }; 

這又如何在LINQ的拉姆達寫?順便提一下,這是否被稱爲SelectMany查詢?

此外,這可以通過連接來完成,如上所示,這樣做有什麼優點和缺點。

回答

7

是的,這是一個SelectMany。您使用SelectMany將嵌套或分層集合(在這種情況下,訂單嵌套在客戶下)「拼合」爲簡單的單層集合。

customers.Where(c => c.Region == "WA") 
    .SelectMany(c => c.Orders) 
    .Where(o => o.Orderdate >= cutoffDate) 
    .Select(x => new { x.OrderID, x.Customer.CustomerID }); 

如果訂單是客戶的財產,則不需要使用聯接。

+0

Broadhust - 謝謝你的迴應。使用SelectMany與只是一個連接有什麼好處?比另一個更有效率嗎? –

+0

它取決於LINQ提供程序;你使用'LINQ-to-SQL'還是'-Objects'?看到我的問題http://stackoverflow.com/q/7229569/146077 –

+1

通常,LINQ中的規則是'使用任何最簡單的'。我們不使用LINQ,因爲它非常高效,我們使用它,因爲它易於編寫且易於閱讀。在這種情況下,'Join'可能效率較低,因爲你重新加入了一個已經有參考的東西,但是我不知道沒有分析它。 –