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],
Похожие статьи
|
|