Причина:
Конструктивно LINQ to Entities требует, чтобы все выражение запроса LINQ было преобразовано в запрос сервера. Только несколько некоррелированных подвыражений (выражений в запросе, которые не зависят от результатов с сервера) оцениваются на клиенте до перевода запроса. Произвольные вызовы методов, которые не имеют известного перевода, например, GetHomeFeatures () в этом случае, не поддерживаются.
Более конкретно, LINQ to Entities поддерживает только конструкторы без параметров и Initializer .
Решение:
Поэтому, чтобы преодолеть это исключение, вам нужно объединить свой подзапрос с основным для GetCommunityFeatures () и GetHomeFeatures () вместо прямого вызова методов из запроса LINQ. Кроме того, существует проблема в строках, когда вы пытались создать новый экземпляр LazyList , используя его параметризованные конструкторы, как вы, возможно, делали в LINQ to SQL . Для этого решением было бы переключиться на клиентскую оценку запросов LINQ (LINQ to Objects). Это потребует от вас вызова метода AsEnumerable для запросов LINQ to Entities перед вызовом конструктора LazyList.
Примерно так должно работать:
public IQueryable<Models.Estate> GetEstates()
{
return from e in entity.Estates.AsEnumerable()
let AllCommFeat = from f in entity.CommunityFeatures
select new CommunityFeatures {
Name = f.CommunityFeature1,
CommunityFeatureId = f.CommunityFeatureId
},
let AllHomeFeat = from f in entity.HomeFeatures
select new HomeFeatures() {
Name = f.HomeFeature1,
HomeFeatureId = f.HomeFeatureId
},
select new Models.Estate {
EstateId = e.EstateId,
AllHomeFeatures = new LazyList<HomeFeatures>(AllHomeFeat),
AllCommunityFeatures = new LazyList<CommunityFeatures>(AllCommFeat)
};
}
Подробнее: Пожалуйста, посмотрите LINQ to Entities, что не поддерживается? для получения дополнительной информации.
Также проверьте LINQ to Entities, Временные решения для того, что не поддерживается для подробного обсуждения возможных решений.
(Обе ссылки являются кэшированными версиями, потому что оригинальный сайт не работает)