Вопрос по c#, .net, linq – System.Linq.Dynamic - Могу ли я использовать предложение IN в операторе WHERE

12

У меня есть динамическое выражение linq WHERE:

<code>dataContext.Table.Where("id = 0 Or id = 1 Or id = 2 Or ...");
</code>

Я хочу изменить на:

<code>dataContext.Table.Where("id IN (0, 1, 2, ...)");
</code>

Но это не работает. Как я могу сделать это для лучшей производительности?

Ваш Ответ

3   ответа
5
var ids = new int[] {1,2,3,4};
dataContext.Table.Where(f => ids.Contains(f.id))
Спасибо, я знаю это, но имя столбца "id" меняется. Я получаю эту колонку динамически. Поэтому я не могу использовать статический Linq. Я должен использовать динамическую библиотеку linq для строки, где clausule в качестве примера.Dynamic Linq Pavel Jedlicka
@ Ingenu, прочитайте ресурс, и вы узнаете, что такое Dynamic Linq Adrian Iftode
10

От Как использовать «содержит» или «нравится» в динамическом запросе linq?

//edit: this is probably broken, see below
ids = new int[] {1,2,3,4};
dataContext.Table.Where("id.Contains(@0)", ids);

Aside: рекомендуется использовать заполнители в динамических выражениях linq. В противном случае вы можете открыть себя для инъекций linq Возможно ли внедрение через Dynamic LINQ?)

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

На самом деле, я думаю, что все испортил. К сожалению, я не могу проверить это в данный момент. Но я думаю, что правильный синтаксис в этом случае должен бытьdataContext.Table.Where("@0.Contains(id)",ids);, а не наоборот, и эта версия делаетн работать из коробки.

ВидетьВо для способа добавить эту функциональность в динамическую ссылку. Вам нужно изменить библиотеку для этого.

4

что в версии 1.0.4 System.Linq.Dynamic мы можем использовать следующий синтаксисdataContext.Table.Where("@0.Contains(outerIt.id)",ids); как это было сделано и представлено в уже цитируемом блоге:Во

Похожие вопросы