2017-06-09 6 views
2

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

はここにあなたの問題への解決策です。 あなたはこのようなものを使用する必要があります:Click Here

ホープこれはあなたの問題を解決:

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

私はあなたの問題に取り組んでサンプルを作成しました。ありがとう!!

+0

これは私が欲しかったものです。 foreach本体の "item.OrderId"では、私はOrderIdプロパティを見つけることができません。親オブジェクトの代わりに子オブジェクトに接続しました。私はOrderItemのプロパティーしか見ることができません。 : – ejmtv

+0

私はいくつかの変更を行い、最終的にそれを練習しました! orders.SelectMany(o => o.OrderItems、(o、oi)=> new {o.OrderID、oi.ProductName})ここで(oi = > oi.ProductName == "ウィジェット") – ejmtv

+0

ニース、または次のようなことができます: 'foreach(orders.SelectMany(x => x.OrderItems)のvar item .Where(y => y.ProductName == "ウィジェット")(Z => z.OrderId)) {Console.WriteLineを( "{0}"、項目); }選択。 ' –

4

メソッドの構文はそのようになります:

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

select manyを使用するとどうなるのですか?私が試したが動作していないものを見てください。 – ejmtv

関連する問題