我必须将下面的linq查询更改为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"}
如何将此查询更改为动态表达式?
答案 0 :(得分:0)
我个人从不使用动态查询语法,但是如果必须的话,以下应该起作用:
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);