LINQ if中的where子句条件

时间:2018-12-12 17:25:34

标签: c# linq collections where

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

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有什么问题?

3 个答案:

答案 0 :(得分:3)

使用const printWindow = window.open('', 'Print', 'height=600,width=800'); 代替Any,因为Where返回一个序列,而不是Where

bool

答案 1 :(得分:0)

Where()不会返回布尔值,而是返回IEnumerable,因此不能在if子句中使用。您应使用Any()

if (suborder.OrderLineItemList.Any(x => x.Product == "Shoes") || 
    suborder.OrderLineItemList.Any(x => x.BundleComponentList.Any(y => y.Product == "Shoes")))

还请注意,上述if子句假定子顺序永远不会为空。

答案 2 :(得分:0)

我会将lambda与LINQ结合使用。更容易阅读和查看正在发生的事情:

var a = [1,2,3,4]+[5,6,7,8];
var b = [1,2,3,4]-[5,6,7,8];