我在使用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的空白项目。
答案 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) };