Подтвердить что ты не робот

System.Linq.Dynamic - могу ли я использовать оператор IN в инструкции WHERE

У меня есть динамический оператор linq WHERE:

dataContext.Table.Where("id = 0 Or id = 1 Or id = 2 Or ...");

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

dataContext.Table.Where("id IN (0, 1, 2, ...)");

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

4b9b3361

Ответ 1

Из Как использовать "содержит" или "как" в динамическом запросе linq?

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

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


EDIT:

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

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

Ответ 2

var ids = new int[] {1,2,3,4};
dataContext.Table.Where(f => ids.Contains(f.id))

Ответ 3

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