【问题标题】:PredicateBuilder where clause issuePredicateBuilder where 子句问题
【发布时间】:2012-06-27 05:33:37
【问题描述】:

我正在使用 PredicateBuilder 生成 where 子句

var locationFilter = PredicateBuilder.True<dbCompanyLocation>();
locationFilter = locationFilter.And(s => s.IsPrimary == true && s.State == practiceState);

var companyPredicate = PredicateBuilder.True<dbCompany>();
companyPredicate = companyPredicate.And(c => c.dbCompanyLocations.Where(locationFilter));

我收到以下错误,任何人都可以为此提供帮助,或者我做错了什么。

实例参数:无法从“System.Data.Linq.EntitySet”转换为“System.Linq.IQueryable”

【问题讨论】:

    标签: predicatebuilder


    【解决方案1】:

    直接的问题似乎是dbCompany.dbCompanyLocations 是一个EntitySet,它实现了IEnumerable&lt;T&gt; 而不是IQueryable&lt;T&gt;。这意味着它的Where 扩展方法需要Func&lt;dbCompanyLocation, bool&gt;,但是您提供的locationFilter 变量是Expression&lt;Func&lt;dbCompanyLocation, bool&gt;&gt;

    您可以通过调用Compile 方法从locationFilter 创建Func&lt;dbCompanyLocation, bool&gt;

    然而,另一个问题是即使它进行了类型检查,c =&gt; c.dbCompanyLocations.Where(locationFilter) 也不是谓词,因为Where 返回一个IEnumerable&lt;T&gt; 而不是布尔值。您可能打算使用 Any 而不是 Where

    companyPredicate = companyPredicate.And(c => c.dbCompanyLocations.Any(locationFilter.Compile()));
    

    【讨论】:

      猜你喜欢
      • 2016-04-23
      • 2013-01-08
      • 1970-01-01
      • 1970-01-01
      • 2022-09-24
      • 2013-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多