2015-10-02 2 views
-1

Я пытаюсь использовать запрос linq для динамического выбора записей на основе идентификатора учетной записи. Идентификатор учетной записи - это столбец int в sql-сервере.linq dynamic where where with или condition на столбце INT

var idList = new int[123, 456]; //these number change with each user. 
foreach (var id in idList) { 
     query = query.WHERE(cs => cs.pkID = id); 
} 

Вышесказанное делает это предложением AND where. Я бы предпочел, чтобы это было OR. Вышеупомянутый idList может содержать от 1 до 100. Варьирование с каждым пользователем.

Как я могу заставить работу linq работать с предложением OR. Содержит не работает на столбцах INT.

Хотелось бы, чтобы выбор выглядел примерно так.

select * from table where id = 123 or id = 456 

У меня есть куча других столбцов, которые можно добавить к предложению where. Получение динамической работы ИЛИ дает мне головную боль.

Спасибо.

+1

SQL будет использовать 'IN':' где id в (123, 456) '. –

+0

Я использую linq для решения этой проблемы. будьте внимательны. – user3434990

+0

@ user3434990 Хотя ссылка, предоставленная как дубликат для этого вопроса, очень полезна, я думаю, что использование Содержит в вашем случае - лучший вариант. –

ответ

2

Вы можете использовать cs=>idList.Contains(cs.pkID)

var idList = new List<int>(){123, 456}; 
var result = query.Where(cs => idList.Contains(cs.pkID)); 

Таким образом, вам не нужен какой-либо цикл, и это эквивалентно:

SELECT somecolumns FROM sometable WHERE pkId in (123, 456) 

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

+0

Содержит не вариант idList – user3434990

+0

@ user3434990, это вариант, когда вы используете Список. –

+0

Я верю, что вы можете использовать 'idList.Cast () .Contains (cs.pkID)', если вам нужно использовать массив – JamieD77

0
query = query.WHERE(cs => idList.Contains(cs.pkID); 

Вы можете использовать что-то в этом роде.

Смотрите наш оригинальный запрос: = is is == in C#.

+0

как упоминалось выше idList.Contains не является option..What я имею в виду, что он недоступен в списке свойств. – user3434990

+0

Просто добавьте .ToList()? – Carra