LINQ подзапрос "NOT IN" проблема - PullRequest
4 голосов
/ 10 мая 2011

Я не понимаю, почему этот запрос не выполняется.

var qTags = from tagsU in _context.ADN_ProductTagsView
where !(from o in _context.ADN_ProductTagsView
        where o.ProductID == productId
         select o.ProductTagID).Contains(tagsU.ProductTagID)
select tagsU;

Или вот этот:

var tagAux = from o in _context.ADN_ProductTagsView
             where o.ProductID == productId
             select o.ProductTagID;

var qTags = from tagus in _context.ADN_ProductTagsView
            where !tagAux.Contains(tagus.ProductTagID)
            select tagus ;

Оба дают мне эту ошибку:

LINQ to Entities does not recognize the method 'Boolean Contains[Int32](System.Linq.IQueryable`1[System.Int32], Int32)' method, and this method cannot be translated into a store expression.

Кто-нибудь может мне помочь?

Ответы [ 2 ]

5 голосов
/ 10 мая 2011

Кажется, что реализация используемого QueryProvider не завершена.Я не знаком с QueryProvider, который вы используете, но, возможно, вы можете попробовать что-то вроде этого:

var qTags = from tagsU in _context.ADN_ProductTagsView
where !(from o in _context.ADN_ProductTagsView
        where o.ProductID == productId
         select o.ProductTagID).Any(tagId => tagId == tagsU.ProductTagID)
select tagsU;

Надеюсь, это поможет

2 голосов
/ 10 мая 2011

Попробуйте. Любой

var qTags = from tagus in _context.ADN_ProductTagsView
            where !tagAux.Any(t=> t== tagus.ProductTagID)
            select tagus ;

Кстати, запрос не запускался, поэтому, пожалуйста, проверьте синтаксис.

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