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则会错位导致错误,如下图)

 

posted @ 2023-07-25 13:17  Ace001  阅读(202)  评论(0编辑  收藏  举报