У меня есть этот проект, настроенный с EF4, и я использую LINQ to Entities для формирования запросов.
У меня возникли проблемы с запросом, который включает в себя множество условных выражений where и несколько левых внешних объединений.
Я частично решил условные условия where с помощью следующего метода расширения (который я нашел здесь ).
public static IQueryable<TSource> WhereIf<TSource>(this IQueryable<TSource> source, bool condition, Expression<Func<TSource, bool>> predicate)
{
if (condition)
return source.Where(predicate);
else
return source;
}
У меня сейчас проблема в том, что LINQк сущностям не распознает метод расширения, когда я использую его в соединенных таблицах.
Вот часть запроса:
from p in context.Entities.OfType<Patient>()
.WhereIf(!string.IsNullOrEmpty(name), p => p.Name.Contains(name))
from c in context.Contacts
.Where(cp => cp.EntityID == p.EntityId).DefaultIfEmpty()
.WhereIf(timestamp != null, c => c.Timestamp > timestamp)
Я говорю, что частично решен, потому что он прекрасно работаетв первый раз (имя пациента) в этом запросе, но во второй раз (отметка времени) он выдает мне эту ошибку:
LINQ to Entities does not recognize the method 'System.Linq.IQueryable`1[x.Contact] WhereIf[Contact](System.Linq.IQueryable`1[x.Contact], Boolean, System.Linq.Expressions.Expression`1[System.Func`2[x.Contact,System.Boolean]])' method, and this method cannot be translated into a store expression.
Итак, мне интересно, если кто-нибудь знает, как я могу это исправить?