Выберите «IN» в LINQ to SQL - PullRequest
       4

Выберите «IN» в LINQ to SQL

4 голосов
/ 28 марта 2011

Я получаю список объектов для обновления, и у меня есть их идентификаторы.Я хочу получить исходные из базы данных, поэтому я делаю:

String[] ids = updatedEvents.Select(ue => ue.id).ToArray();

var originalEventsToUpdate = Db.tbl_ffk_event
                               .Where(e => ids.Contains(e.id))
                               .ToArray();

Но что я получаю, используя журнал, это сгенерированный SQL:

SELECT [t0].[id], [t0].[fs_mapping_id], [t0].[fs_id_value], [t0].[desc]
FROM [dbo].[tbl_ffk_event] AS [t0]
WHERE 0 = 1
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.1

И этот SQL означает "получить всю таблицу ".

Как мне сгенерировать" IN ", как это:

SELECT [t0].[id], [t0].[fs_mapping_id], [t0].[fs_id_value], [t0].[desc]
FROM [dbo].[tbl_ffk_event] AS [t0]
WHERE [t0].[id] IN ('aaa','bbb','ccc','ddd','eee',)

Заранее спасибо.

РЕДАКТИРОВАТЬ:

Я чувствую себя глупо, я не видел WHERE 0 = 1.Это потому, что в этой точке ничего нет в коллекции ids.Теперь я проверил, что есть элементы, и SQL генерируется правильно.К сожалению.

Ответы [ 3 ]

2 голосов
/ 28 марта 2011

На самом деле, из-за условия WHERE 0 = 1 этот SQL вернет пустой набор записей (т.е. правильно сопоставленный в терминах схемы, но без строк).

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

Если предположить, что это неправильно, я бы посмотрел на сопоставление столбцов для свойства id. Правильно ли он совпадает с базой данных?

0 голосов
/ 01 июля 2013

Попробуйте это:

Dim strval As String = ""
Dim strnum(30) As String

strval = "1,2,3,4,5,6,7,9"

strnum = strval.split(",")

originalEventsToUpdate = (from a in Db.tbl_ffk_event where strnum.contains(a.id) select a).tolist
0 голосов
/ 28 декабря 2012

Возможно, ваш список пустует, это нормальное поведение Linq.

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