Использование .Contains в запросе linq, возвращающем исключение SystemException - PullRequest
0 голосов
/ 05 февраля 2012

У меня возникли проблемы с запросом linq, который я пытаюсь написать.

У меня есть список продуктов А, которые были изменены, поэтому я пытаюсь получить список продуктов из БД, чтобы я мог применить к ним изменения.

Я пробовал 2 разныхзапросы

   var query = from p in db.Products
                where products.Select(z => z.id).Contains(p.Id)
                select p;

        var query2 = from p in db.Products where (from o in products
                     select o.id)
                    .Contains(p.Id)
                    select p;

Обе попытки возвращают ошибку

base {System.SystemException} = {"Невозможно создать постоянное значение типа 'ProjectABC.Models.ProductModel'.В этом контексте поддерживаются только примитивные типы (такие как Int32, String и Guid). "}

Что я делаю не так?

1 Ответ

2 голосов
/ 05 февраля 2012

У меня была такая же проблема на днях, кажется, EF не поддерживает Select (). Contains () без этой ошибки. После небольшого тестирования я в итоге разделил его на то, что в вашем случае будет соответствовать;

var IDs = products.Select(z=>z.id);
var query = from p in db.Products
            where IDs.Contains(p.Id)
            select p;

, который хорошо работал в моем случае, когда коллекция "products" все равно была в памяти (то есть, результат ToList () из базы данных)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...