Linq и Содержит () - PullRequest
       23

Linq и Содержит ()

1 голос
/ 19 мая 2010

Я использую следующий метод:

public PageOfList<ConsaltQuestion> Filter(int? type, int pageId, EntityCollection<ConsaltCost> ConsaltRoles)
    {
       // return _dataContext.ConsaltQuestion.Where((o => o.Type == type || type == null) && (o=>o.Paid == paid));
        return (from i in _dataContext.ConsaltQuestion where ((i.Type == type || type == null) && (i.Paid == true) && (ConsaltRoles.Contains(ConsaltCostDetails(i.Type.Value)))) select i).ToList().ToPageOfList(pageId, 20);
    }

возвращает ошибку:

LINQ to Entities does not recognize the method 'Boolean Contains(mrhome.Models.ConsaltCost)' method, and this method cannot be translated into a store expression.

Как я могу это исправить?

Ответы [ 2 ]

2 голосов
/ 19 мая 2010

Linq to Entities не поддерживает метод Contains. В этом случае вы должны рассмотреть использование логики фильтра Contains с использованием объектов в памяти (Linq-to-Objects). Если это неосуществимый вариант из-за соображений производительности, я предлагаю вам создать хранимую процедуру, которая выполняет содержащиеся, а затем сопоставить ее с вашей моделью сущности.

В следующем URL-адресе показаны поддерживаемые операторы запросов http://msdn.microsoft.com/en-us/library/bb738550.aspx

0 голосов
/ 19 мая 2010

Версия 1 Entity Framework не поддерживает Contains. Версия 4 делает, но если обновление невозможно, вы можете продублировать его, создав дерево выражений.

Здесь есть хорошая статья с примером кода: http://blogs.msdn.com/alexj/archive/2009/03/26/tip-8-writing-where-in-style-queries-using-linq-to-entities.aspx

...