2010-10-22 9 views
2

Я строю свой запрос, используя PredicateBuilder из LinqKit. это здорово и делает именно то, что я ищу.EntityFramework Проблемы с литьем

Для того, чтобы мой код более многократного использования (таблицы и представления) я создал обобщенный класс предикат строитель:

public class LocalPredicateBuilder<T> where T : IResort 
... 
    var predicate = PredicateBuilder.True<T>(

который предоставляет метод BuildPredicate. Я могу использовать его как это:

var predicate = new LocalPredicateBuilder<Resort>().BuildPredicate(); 
var resorts = _entities.Resorts.Where(predicate).ToList(); 

Однако, когда я пытаюсь сделать это, я получаю эту ошибку во время выполнения (кстати сущность и объекты реализации IResort): Невозможно бросить тип «ConsoleApplication1.Entities.Resort» в type 'ConsoleApplication1.Entities.IResort'. LINQ к Entities поддерживает только литье Модель Entity Data примитивные типы

я попытался литья (не работает):

var rlist = eq.Cast<Resort>().ToList(); 

Любой другой путь я могу получить вокруг этого вопроса литья?

UPDATE

не имея много удачи, получая предикаты для работы с использованием интерфейсов .. поэтому я solved my problem by going with POCOs.

ответ

0

Ну, ошибка точна. Вы не можете сделать это в запросе L2E, потому что ваш интерфейс (IReport) не является частью вашей модели сущности и, следовательно, не может быть преобразован в SQL. Вы должны использовать тип сущности, а не интерфейс для этого.

0

просто создать частичный класс для объекта frameowrk объекта и сделать это реализовать интерфейс.

другим способом было бы создать список типов вы хотите

то сделать для каждого на LinQ набора данных и добавления элементов в коллекции.

проблема вызвана тем, что .net не знает, как бросить List<ISomething> в List<Something>

+0

У меня есть. не смог бы скомпилировать иначе –

+0

ok, то это проблема, которую я добавил после моего редактирования. –

+0

запрос действительно возвращает список , поэтому это должно быть возможно сделать. ISomething используется только для создания предикатов, используемых в запросе. –

Смежные вопросы