LINQ检索第一个匹配项,或列表中每个项的空白值

时间:2012-05-14 17:36:35

标签: linq

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

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

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

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

最后匹配.Count == purchaseOrders.Count

目前,我只收到PO中匹配的项目,而且我不确定如何确保每个PO只能获得一个项目。并且我不知道如何确保如果没有匹配,我得到该PO的空白项目。

1 个答案:

答案 0 :(得分: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) };