2012-02-04 4 views
0

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

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

Я попытался 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; 

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

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

Что я делаю неправильно?

ответ

2

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

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

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

+0

Благодаря Joachim, который работает. –

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