Linq Query вместо Contains Operator for Performance проблема - PullRequest
0 голосов
/ 17 августа 2011

Мне нужно вытащить всех клиентов, чьи идентификаторы есть в списке

У меня есть список идентификаторов клиентов

Список custidlist = новый список {1,2,3 .... и т. Д.} ();

Мне нужно написать запрос linq, чтобы получить всех клиентов, чьи идентификаторы находятся в списке выше

custidlist .

var Customers = db.Customers.Where (c => custidlist. Содержит (c.customerid));

Использование Содержит плохо влияет на производительность.

Можем ли мы использовать СРАВНИТЕЛЬНЫЙ ОПЕРАТОР, КАК ЭТОТ

var Customers = db.Customers.Where (c => custidlist. Сравните (c.customerid)); ????

I Heard Compare лучше всего подходит для Performance

Ответы [ 2 ]

1 голос
/ 17 августа 2011

Поскольку это Linq to SQL / Entities, ваш запрос Linq Contains будет преобразован в оператор SQL примерно так:

select * from Customers where customerId in (1,2,3)

Мало того, что ваше другое предложение не поддерживается, но вы также не можете сделатьлучше, чем производительность SQL.

0 голосов
/ 17 августа 2011

Когда вы пишете запрос Contains в Linq для SQL, он будет запущен как SQL-запрос in, и ваш запрос на базе данных должен быть самым быстрым ..

Следует предостеречь от этого, однако следует помнить, что в запросе может быть ограничение на число объектов, которые, по моему мнению, составляют около 2000+ на сервере sql, и способ обойти это заключается в пакетной обработке вашего запроса.

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