如果第一个列表包含另一个列表,则相交2列表

时间:2016-07-18 13:55:09

标签: c# .net linq

我有2个字符串列表,list Alist Blist A是包含路径的字符串列表,另一个包含文件夹的字符串。例子:

List<string> listA = new List<string>{ "c:\myPath\FolderA\blabla\", "c:\myPath\FolderB\blabla2\", "c:\myPath\FolderA\blabla3\" "c:\myPath\FolderC\blabla\"};
List<string> listB = new List<string> { "FolderA, FolderC"};

我想要一个比较2列表的方法。如果listA包含listB中的任何一个,则它有效,否则我不想要它。所以基于这个逻辑,我有:

List<string> listReturn = new List<string>{ "c:\myPath\FolderA\blabla\", "c:\myPath\FolderA\blabla3\" "c:\myPath\FolderC\blabla\"};

到目前为止,我所做的只是一种迭代第一个列表的方法,并使用Linq Contain调用对字符串进行Any调用,如下所示:

private static List<string> FilterList(List<string> listA, List<string> listB)
{
    List<string> listReturn = new List<string>();

    foreach (string val in listA)
    {
        if (listB.Any(item => val.Contains(item)))
        {
            listReturn.Add(val);
        }
    }

    return listReturn;
}

它还不错,但如果有可用的Intersect方法,我想使用Linq方法或.NET方法。谢谢。

2 个答案:

答案 0 :(得分:2)

Where()使用listA过滤此列表中的项目,Exists()使用listB过滤条件:

List<string> listA = new List<string> {@"c:\myPath\FolderA\blabla\", @"c:\myPath\FolderA\blabla2\", @"c:\myPath\Folder\blabla3\", @"c:\myPath\FolderC\blabla\"};
List<string> listB = new List<string> { "FolderA", "FolderC" };
var intersect = listA.Where(a => listB.Exists(b => a.Contains(b)));

答案 1 :(得分:1)

试试这个

var result = listA.Where(i => listB.Any(y => i.Contains(y)).ToList();