使用另一个列表的内容过滤列表

SP1*_*SP1 4 c# list filter c#-4.0

我有两个清单。我想使用第二个列表中的元素过滤掉第一个列表。所以我有这个代码:

 List<data> dataList = somedata;
 IEnumerable<Filter> filterList  = someFilterData;
Run Code Online (Sandbox Code Playgroud)

然后我使用以下代码进行过滤:

foreach (var s in filterList)
{
     dataList =   dataList .Where(l => l.dataId!= s.Id).ToList();     
}
Run Code Online (Sandbox Code Playgroud)

有人可以建议这是否是一个足够好的方法,或者我们如何使用其他技术使其更好。注意:该列表可能会变得很大,因此我们也在考虑性能。

Kap*_*pol 6

您需要做的就是仅获取过滤器列表中找不到的这些项目。您可以使用循环以“老派”方式完成此操作:

foreach (var listItem in dataList)
{
    foreach (var filterItem in filterList)
    {
        if (listItem == filterItem)
        {
            dataList.Remove(listItem);
            continue;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

或者您可以使用 LINQ 进行过滤:

dataList.Where(d => filterList.All(f => f.Id != d.dataId))
Run Code Online (Sandbox Code Playgroud)