1

linq クエリで問題が発生しています

var matches = from po in purchaseOrders
          from poItem in po.Items
          where TestMatch(poItem)
          select new Item(poItem);

purchaseOrders はリストです。各 PurchaseOrder にはリストが含まれます。

TestMatch(poItem)結果に必要なのは、各注文書で (の結果に基づいて) 一致する最初の poItem 、または空白の Item オブジェクトです。

最終的にmatches.Count == purchaseOrders.Countになるように

現在、PO に一致するアイテムのみを取得しています。PO ごとに 1 つのアイテムのみを取得する方法がわかりません。また、一致がない場合に、その PO の空白のアイテムを取得する方法がわかりません。

4

1 に答える 1

4

次のようなものが必要なようです。

 var matches = from po in purchaseOrders
               let poItem = po.Items.FirstOrDefault(item => TestMatch(item))
               select new { PO = po, 
                            Item = poItem == null ? null : new Item(poItem) };

C#4では、FirstOrDefaultへの引数にメソッドグループ変換を使用できます。

 var matches = from po in purchaseOrders
               let poItem = po.Items.FirstOrDefault(TestMatch(item)
               select new { PO = po, 
                            Item = poItem == null ? null : new Item(poItem) };
于 2012-05-14T17:40:49.433 に答える