Выражение Linq для любого и содержит - PullRequest
0 голосов
/ 01 апреля 2020

Мне нужно изменить запрос linq ниже на динамическое c выражение в linq, но у меня проблема с Any и Contains методами.

List<string> set1 = new List<string> {"100", "400"};
List<MyObj> set2 = new List<MyObj>();
set2.Add(new MyObj() {name="a", code="100"});
set2.Add(new MyObj() {name="b", code="200"});
set2.Add(new MyObj() {name="c", code="300"});
set2.Add(new MyObj() {name="d", code="400"});

Пример запроса

var test1in2 = set2.Where(t2 => set1.Any(t1 => t2.code.Contains(t1)));

//Return value
{name="a", code="100"} and {name="d", code="400"}

Как мне преобразовать этот запрос в динамическое c выражение?

1 Ответ

0 голосов
/ 05 мая 2020

Лично я никогда не использую синтаксис динамического запроса c, но если вам нужно, должно работать следующее:

var queryResult = 
    from s2 in set2
    join s1 in set1 on s2.code equals s1        
    select s2;

Просто для полноты вышеприведенного можно также переписать в следующем выражении; без использования более медленных операторов contains и any:

var expressionResult = set2
    .Join(set1, s2 => s2.code, s1 => s1, (s2, s1) => s2);
...