1

我在使用 linq 查询时遇到了一些问题

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

purchaseOrders 是一个 List 每个 PurchaseOrder 都包含一个 List

我需要的结果是每个采购订单中匹配的第一个 poItem(基于 的结果TestMatch(poItem)),或者是一个空白的 Item 对象。

所以最后matches.Count == purchaseOrders.Count

目前,我只得到与 PO 匹配的项目,我不确定如何确保每个 PO 只得到一个项目。而且我不知道如何确保如果没有匹配项,我会得到那个 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 回答