linq lambda 两个list求交集:根据每一项模糊匹配(contains) 并且带出where过滤条件里的值
直接使用 var result = list1.Where(str1 => list2.Contains(str))是不行的,这个要求两个list的string值必须有相等的才行 例如list1中有apple,那么list2中必须有apple才能匹配,而list2中只有app所以匹配不了
解决办法:
List<string> list1 = new List<string> { "apple", "banana", "orange" }; List<string> list2 = new List<string> { "app", "ban", "ora" ,"test"}; var result = list1.Where(str1 => list2.Any(str2 => str1.Contains(str2))).Select((x,index)=>new { x,l2=list2[index]}).ToList();
这里select使用了带index的重载,从而根据index取where条件里list2中与之对应的值(仅适用于:list1和list2中是1:1的关系,如果是1:N则会错位导致错误,如下图)
作者:xuejianxiyang
出处:http://xuejianxiyang.cnblogs.com
关于作者:Heaven helps those who help themselves.
本文版权归原作者和博客园共有,欢迎转载,但未经原作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。