1

我正在使用 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”

4

1 回答 1

1

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

您可以通过调用该方法来创建一个Func<dbCompanyLocation, bool>from 。locationFilterCompile

然而,另一个问题是,即使它进行了类型检查,c => c.dbCompanyLocations.Where(locationFilter)也不是谓词,因为Where返回的是 anIEnumerable<T>而不是 bool。您可能打算使用Any而不是Whereie

companyPredicate = companyPredicate.And(c => c.dbCompanyLocations.Any(locationFilter.Compile()));
于 2012-06-26T21:33:37.807 回答