我有一个包含以下属性的类:
public class Suborder
{
public List<OrderLineItem> OrderLineItemList { get; set; }
public string ProviderCode { get; set; }
}
public class OrderLineItem
{
public List<OrderLineItem> BundleComponentList { get; set; }
public string Product { get; set; }
}
我想遍历BundleComponentList,检查它的任何项目的Product值是否等于Shoes。我试过这样,但得到错误
if (suborder.OrderLineItemList.Any(x => x.Product == "Shoes") || suborder.OrderLineItemList.Where(x=>x.BundleComponentList.Any(y=>y.Product == "Shoes")))
运算符"||"不能应用于类型为"bool"和'System.Collections.Generic.IEnumerable
我的LINQ出了什么问题?
使用Any
而不是Where
,因为Where
返回的是一个序列,而不是一个bool
。
suborder.OrderLineItemList.Any(x => x.BundleComponentList.Any(y => y.Product == "Shoes")))
我会将lambda与LINQ结合起来。阅读和查看发生的事情要容易得多:
var orders = from o in suborder.OrderLineItemList
where
o.Product == "Shoes" ||
o.BundleComponentList.Any(c => c.Product == "Shoes")
select o;
bool isShoesOrder = orders.Any();
Where()
不返回布尔值,而是返回IEnumerable
,因此不能在if子句中使用。您应该在您的情况下使用Any()
。
if (suborder.OrderLineItemList.Any(x => x.Product == "Shoes") ||
suborder.OrderLineItemList.Any(x => x.BundleComponentList.Any(y => y.Product == "Shoes")))
还请注意,上面的if子句假设子订单从不为空。