как фильтровать с помощью массива/списка через динамический linq

К черту все!

Я перепробовал все известные варианты фильтрации с помощью Contains, но пока безрезультатно.

СПОСОБ №1

ret = ret.Where("CaseID.Contains(@0)", {15, 16, 17})

Получает следующую ошибку:

System.Linq.Dynamic.ParseException: «Нет применимого метода «Содержит» для типа «Int32?»

СПОСОБ №2

ret.Where("@0.Contains(outerIt.CaseID)", {15, 16, 17})

Принесите следующую ошибку:

System.Linq.Dynamic.ParseException: «Это не входит в область действия»

Итак, как я могу фильтровать по списку или массиву?

Я использую последнюю библиотеку System.Linq.Dynamic в nuget 1.0.7.


person Yisroel M. Olewski    schedule 28.08.2017    source источник


Ответы (2)


следующее будет работать, но вы должны убедиться, что значения CaseID и массива имеют один и тот же тип.

ret.Where("@0.Any(outerIt.CaseID=it)", array)

person MGal    schedule 29.08.2017
comment
Это все еще дает мне ошибку System.Linq.Dynamic.ParseException: 'No 'it' is in scope' - person JGOakley; 19.12.2017
comment
попробуйте заменить параметр массива списком - person MGal; 12.08.2018

Не совсем уверен, правильно ли я понял ваш вопрос. Но вы имеете в виду что-то вроде этого? Это решается с помощью лямбда-выражения.

var listA = new[] {1, 2, 3, 5, 8};
var listB = new[] {1, 3, 5, 7, 11};
var res = listA.Where(itemA => listB.Contains(itemA));
// res = {1,3,5}
person CanereCurrere    schedule 28.08.2017