2017-04-19 110 views
-1

类型的操作数我正在尝试第一个筛选器列表,然后使用OrderBy但我在Where子句中遇到以下错误运算符'&&'不能应用于类型'bool'和'System.Collections.Generic.IEnumerable <Feature>'

操作“& &”不能应用于类型“布尔”和 的操作数的System.Collections.Generic.IEnumerable“

这有什么错我的查询?

Offer internetOffer = offerList 
         .Where(x => (x.VerticalType == VerticalType.HighSpeedInternet) 
         && (x.FeatureList 
          .Where(y => y.FeatureName == Const.CommonConstants.DOWNLOAD_SPEED_FEATURE_NAME))) 
          .OrderByDescending(y => y.Value); 
+0

'&&(x.FeatureList.Where(y => y.FeatureName == Const.CommonConstants.DOWNLOAD_SPEED_FEATURE_NAME)'你是不是指'any'? –

+0

你有答案在这里:https://forums.asp.net /t/2065524.aspx?Operator+cannot+be+applied+to+operands+of+type+bool+and+System+Collections+Generic+IEnumerable+bool+ –

回答

4

x.FeatureList.Where(...)来取代它生产物品的IEnumerable<T>IQueryable<T>FeatureList符合条件。既然你正在寻找一个条件,看看是否有任何这样的项目,使用x.FeatureList.Any(...)代替:

Offer internetOffer = offerList 
    .Where(x => 
      (x.VerticalType == VerticalType.HighSpeedInternet) 
      && (x.FeatureList.Any(y => y.FeatureName == 
       Const.CommonConstants.DOWNLOAD_SPEED_FEATURE_NAME)) 
      ).OrderByDescending(y => y.Value); 

可以请你告诉我怎样才能从这个名单,其FeatureNameConst.CommonConstants.DOWNLOAD_SPEED_FEATURE_NAME获得该项目,并具有最大物业价值Value

添加FirstOrDefault上面的电话:

Offer bestInternetOffer = offerList 
    .Where(x => 
      (x.VerticalType == VerticalType.HighSpeedInternet) 
      && (x.FeatureList.Any(y => y.FeatureName == 
       Const.CommonConstants.DOWNLOAD_SPEED_FEATURE_NAME)) 
      ) 
      .OrderByDescending(y => y.Value) 
      .FirstOrDefault(); 

OrDefault部分会保护你的代码崩溃时没有提供的有一个名为DOWNLOAD_SPEED_FEATURE_NAME功能。

+0

好吧,但然后我想'OrderByDescending'值的那个'Const.CommonConstants.DOWNLOAD_SPEED_FEATURE_NAME'功能,这个查询不会让我这样,对吗? –

+0

@HumaAli Right,'OrderBy'和'OrderByDescending'适用于整个列表,不适用于任何子列表。而不会应用其他标准,但是'x.FeatureList'集合将保持按照它们的自然顺序排列。 – dasblinkenlight

+0

可以请你告诉我如何从这个列表中获得这个列表中的项目,它的FeatureName是'Const.Commo nConstants.DOWNLOAD_SPEED_FEATURE_NAME'并且具有属性'Value'的最大值? –

2

当返回一个IEnumerable不是一个布尔值,只需更换其中任何具有

... x.FeatureList.Any(y => y.FeatureName == Const.CommonConstant.DOWNLOAD_SPEED_FEATURE_NAME))).... 
1

的问题是,

x.FeatureList.Where(y => y.FeatureName == Const.CommonConstants.DOWNLOAD_SPEED_FEATURE_NAME) 

返回IEnumerable<Feature>,而不是boolean值。

假设你要检查是否存在Any()你必须

x.FeatureList.Any(y => y.FeatureName == Const.CommonConstants.DOWNLOAD_SPEED_FEATURE_NAME) 
相关问题