Аналог SQL запиту WHERE IN (Value1, Value2) у LINQ абояк зробити вибірку з входження в

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

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

При побудові звичайного SQL-запиту це завдання вирішується легко з допомогою конструкціїWHERE IN (Value1,Value2, Value3).

На жаль, у LINQ однойменної команди немає. Найпростішим способом може бути просте перерахування порівнюваних значень за умови АБО (OR). Але якщо список значень заздалегідь невідомий і динамічно формується в ході виконання програми, то подібний спосіб не підходить.

Насправді реалізувати подібний запит у LINQ не так складно.

Для цього призначена команда"Contains". Її синтаксис:

Розглянемо з прикладу.

НехайArrayIDs - масив ідентифікаторів продуктів (array of integer), якими потрібно відібрати продукти.

Тоді Linq запит запит може мати вигляд:

var obj = від db в ProductsList() whereArray >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]. @ p1 = 46, @ p2 = 78