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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章