我必须将下面的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"}
如何把这个查询改成动态表达式?
就个人而言,我从不使用动态查询语法,但如果你一定要使用,下面的语法应该可以。
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);