2017-06-09 58 views
2

如何做到這一點的方法的語法形式:如何將此LINQ查詢語法連接兩個對象到方法語法?

foreach (var o in from o in orders 
        from oi in o.OrderItems 
        where oi.ProductName == "Widgets" 
        select o.OrderID) 
    Console.WriteLine("{0}", o); 

試過,但不工作:

foreach (var o in orders 
    .SelectMany(o => o.OrderItems, (o, oi) => new {<<idk what to put here>> }) 
    .Where(oi => oi.ProductName == "Widget")) 
{ 
    Console.WriteLine("WIDGET: {0}", o.OrderID); 
} 

最後我用這個代碼和它的工作!

foreach (var o in orders 
    .SelectMany(o => o.OrderItems, (o, oi) => new { o.OrderID, oi.ProductName }) 
    .Where(oi => oi.ProductName == "Widgets")) 
{ 
    Console.WriteLine("{0}", o.OrderID); 
} 
+0

你有查詢語法,你想將它轉換成LINQ語法 – fubo

回答

1

這裏的解決您的問題。 您應該使用這樣的事:

foreach (var item in orders.SelectMany(x => x.OrderItems).Where(y => y.ProductName == "Widgets")) 
      { 
       Console.WriteLine("{0}", item.OrderId); 
      } 

我創建了一個工作樣本問題的方法:Click Here

希望這能解決你的問題。謝謝!!

+0

這就是我想要的。儘管在foreach正文的「item.OrderId」中,我無法找到OrderId屬性。它連接到子對象而不是父對象。我只看到OrderItems的屬性。 :( – ejmtv

+0

我做了一些一些變化和呼它終於成功了! orders.SelectMany(O => o.OrderItems,(O,OI)=>新{o.OrderID,oi.ProductName})。其中(OI = > oi.ProductName ==「Widgets」) – ejmtv

+0

不錯,或者你可以這樣做: 'foreach(var Item in Order.SelectMany(x => x.OrderItems).Where(y => y.ProductName == 「Widgets」)選擇(z => z.OrderId)) Console.WriteLine(「{0}」,item); }' –

4

方法語法將是這樣的:

orders.Where(o=>o.OrderItems.Any(oi=>oi.ProductName == "Widgets")).Select(o=>o.OrderID) 
+0

使用select select時如何?看到我嘗試過但沒有工作的那個。 – ejmtv