LINQ where子句条件在if中



我有一个包含以下属性的类:

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子句假设子订单从不为空。

最新更新