2012-05-29 2 views
1

Я использую PredicateBuilder генерировать где положениеPredicateBuilder где положение проблема

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)); 

Я получаю следующее сообщение об ошибке, Любой может помочь для этого или я делаю что-то неправильно.

Instance аргумент: не удается преобразовать из «System.Data.Linq.EntitySet» в

ответ

1

непосредственная проблема «System.Linq.IQueryable», кажется, что dbCompany.dbCompanyLocations является EntitySet, который реализует IEnumerable<T>, а не IQueryable<T>. Это означает, что способ расширения Where ожидает Func<dbCompanyLocation, bool>, однако переменная locationFilter, которую вы предоставляете, является Expression<Func<dbCompanyLocation, bool>>.

Вы можете создать Func<dbCompanyLocation, bool> от locationFilter, позвонив по телефону Compile.

Еще одна проблема заключается в том, что даже если он сделал проверку типа, c => c.dbCompanyLocations.Where(locationFilter) не является предикатом, поскольку Where возвращает IEnumerable<T> вместо bool. Предпочитаете использовать, вероятно, Any вместо Where i.e.

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