Поддерживает ли LINQ to SQL оператор t-sql "in" - PullRequest
3 голосов
/ 19 августа 2009

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

select * from products where category in ('shoes','boots')

Поля будут по существу получены из строки запроса (более безопасной, чем эта, но для простоты объяснения), т.е.

string[] myfields = request.querystring["categories"].split(',');

Спасибо

Ответы [ 3 ]

15 голосов
/ 19 августа 2009

Да, вы используете Contains:

db.Products.Where(product => myFields.Contains(product.Category))

ака

from product in db.Products
where myFields.Contains(product.Category)
select product
1 голос
/ 19 августа 2009

Как уже упоминалось, да, он использует метод .Contains. Чтобы воспользоваться другими случайными людьми, которые могут прийти сюда через Bing (или любой другой поисковик): Linq-To-Entities не поддерживает метод .Contains в текущей версии. Однако с помощью простого метода расширения вы можете сделать это:
http://george.tsiokos.com/posts/2007/11/30/linq-where-x-in/

0 голосов
/ 19 августа 2009

Теоретически, вы бы использовали:

var productList = from product in context.Products
    where myfields.contains(product.category)
    select product

Однако вам нужно будет проверить это - я, кажется, вспоминаю, что в оптимизаторе Linq2Sql была ошибка при попытке справиться со списком <> и значениями массива, используемыми таким образом (это могло произойти, только если вы пытались привести их как IQueryable)

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