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

标签 c# list c#-4.0 filter

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

 List<data> dataList = somedata;
 IEnumerable<Filter> filterList  = someFilterData;

然后我使用这段代码进行过滤:

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

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

最佳答案

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

foreach (var listItem in dataList)
{
    foreach (var filterItem in filterList)
    {
        if (listItem == filterItem)
        {
            dataList.Remove(listItem);
            continue;
        }
    }
}

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

dataList.Where(d => filterList.All(f => f.Id != d.dataId))

关于c# - 使用另一个列表的内容过滤一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32013810/

相关文章:

java - .Net 4 垃圾收集

c# - 检查两个文件名是否引用同一个文件

c# - 学习 C# 的书籍

c# - c# 定时器自然是多线程的吗?

c# - 比较类型的语法?

list - 组合 takeWhile、skipWhile

c# - 使用带委托(delegate)的线程在 C# 中的线程中止异常

c++ - std::forward_list 中可以存在循环吗?

python - 将列表中的单词打印到 pygame 中的特定坐标

c# - 将 MMDDYYYY 转换为 01-JAN-YY