Простой вопрос LINQ: ошибка «Локальная последовательность не может быть использована» - PullRequest
1 голос
/ 03 августа 2011

Я довольно новичок в LINQ, поэтому я предполагаю, что упускаю что-то простое. У меня есть код, который генерирует следующую ошибку: локальная последовательность не может быть использована в LINQ to SQL

return (from x in db.CurrentTrackings
                where x.strLocation == BarCode ||
                (from b in ChildBranches where x.strLocation == b.BarCode select b).Count() > 0 ||
                (from c in PlantCustomers where x.strLocation == c.customer_str_id select c).Count() > 0
                select x).Count();

Пожалуйста, дайте мне знать, если вам нужно больше разъяснений. Кажется, это должно сработать, но я должен что-то упустить.

Ответы [ 3 ]

2 голосов
/ 03 августа 2011

У вас не может быть подзапросов локальных последовательностей (например, ChildBranches), смешанных с запросом LINQ-to-SQL (т.е. db.CurrentTrackings), поскольку поставщик LINQ-to-SQL не поддерживает переводлокальные запросы к запросу SQL.LINQ to SQL поддерживает поддержку Содержит () для локальных последовательностей, в этом случае он преобразует его в оператор WHERE X IN (Y1, Y2, Yn):

 var barCodes = ChildBranches.Select(b=>b.BarCode);
 var customerIds = PlantCustomers.Select(c=>c.customer_str_id);

 return (from x in db.CurrentTrackings
         where x.strLocation == BarCode ||
               barCodes.Contains(x.strLocation) ||
               customerIds.Contains(x.strLocation)
         select x).Count();
1 голос
/ 03 августа 2011

Локальные последовательности не могут быть переведены в SQL, кроме случаев, когда вы используете Contains, поэтому ваш запрос, вероятно, будет иметь значение

return (from x in db.CurrentTrackings
       where 
         x.strLocation == BarCode || 
         ChildBranches.Select(b=>b.BarCode).Contains(x.strLocation) ||
         PlantCustomers.Select(c=>c.customer_str_id).Contains(x.strLocation) 
        select x).Count();
0 голосов
/ 03 августа 2011

Запрос генерирует инструкцию SQL, которая будет отправлена ​​на SQL Server, однако коллекции ChildBranches и PlantCustomers не могут быть переданы на SQL Server.

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