Как реализовать эквивалент tsql «IN» с помощью динамического Linq

Я создаю общую форму (C #), которая может получать любой запрос Linq. В этой форме я хочу иметь возможность добавлять фильтры (предложения WHERE). Для операторов вроде '=', '>', 'Like' и т. Д. Я могу делать такие вещи, как IQueryable.Where (someFieldname + "> @ 0", someCriteria) . Но когда я хочу иметь возможность сделать эквивалент T-sql "IN", я полностью теряюсь. Я искал часы, но не могу найти способ осознать это.

Если подумать, один из возможных способов - поместить значения для предложения IN в массив строк или какой-либо другой простой список строк. Затем присоедините этот список к базовому запросу. Но как мне присоединиться к этим двум, если базовым запросом может быть любой запрос?

Пример: Скажем, мой базовый запрос выглядит примерно так:

IQueryable<Object> q = from a in db.Adresses
                       select new { a.Street, a.HouseNr };

В форме, которую я хочу иметь возможность фильтровать по HouseNr, например: Где HouseNr IN (1, 3, 5) Числа (1, 3, 5) доступны в массиве строк (или любом другом Списке строк).

Как я могу этого добиться, зная, что базовый запрос может быть любым?

5
задан Peter Majeed 21 August 2012 в 20:16
поделиться