Аналог SQL запроса "WHERE IN (Value1,Value2)" в LINQ или как сделать выборку по вхождению в множество (по нескольким значениям)


07.06.2012 || Раздел: || MS SQL Server


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

Например, выбрать несколько продуктов, идентификаторы которых совпадают с заданным списком идентификаторов.  Или выбрать студентов из БД, включенных в определенный список групп.

При построении обычного SQL-запроса эта задача решается легко при помощи конструкции WHERE IN (Value1,Value2, Value3).

К сожалению в LINQ одноименной команды нет. Самым простым способом может быть простое перечисление сравниваемых значений в условии ИЛИ (OR). Но если список значений заранее неизвестен и формируется динамически в ходе выполнения программы, то подобный способ не подходит.

На самом деле реализовать подобный запрос в LINQ не так сложно.

Для этого предназначена команда "Contains". Ее синтаксис:

where <массив списка значений>.Contains(<сравниваемое поле таблицы>)

Рассмотрим на примере.

Пусть ArrayIDs - массив идентификаторов продуктов (array of integer), по которым нужно отобрать продукты.

Тогда Linq-запрос запрос может иметь вид:

var obj = from db in ProductsList() where ArrayIDs.Contains(db.intProductID) select db

Или тоже самое, но в лямбда-синтаксисе:

var obj = ProductsList().Where(db => ArrayIDs.Contains(db.intProductID))

Как Вы видите, дотаточно просто сформировать массив нужных значений и добавить его в запрос. В результате выполнения подобного запроса будет сформирован SQL-скрипт, содержащий условие WHERE IN:

exec sp_executesql N'SELECT [t0].[intProductID], [t0].[ProductName], [t0].[Price], 
FROM [dbo].[tblProducts] AS [t0]
WHERE [t0].[intProductID] IN (@p0, @p1, @p2)',
N'@p0 int,@p1 int, @p2 int',
@p0=15,@p1=46, @p2=78

© Элла С. (Автор: Ella Sea)

< Предыдущая статья

Установка роли Web Server (включение IIS) на Windows Web Server 2008 R2 для работы сайтов на ASP.Net

Следующая статья >

Общий алгоритм создания и публикации плагинов для системы KooBoo CMS


Комментарии

Комментировать с помощью "FaceBook"

Комментировать с помощью "вКонтакте"