C# 从 List<T> 中选择存在于另一个列表中的所有元素

Posted

技术标签:

【中文标题】C# 从 List<T> 中选择存在于另一个列表中的所有元素【英文标题】:C# Select all elements from List<T> which exists in another list 【发布时间】:2018-04-23 11:17:24 【问题描述】:

我有以下代码:

public class A 

   string Name get; set;
   string anotherProperty get; set;
   Dictionary<string, string> Attributes get; set;

List<A> listA = new List<A>();
List<string> Filters = new List<string>();

现在,我要做的是从 listA 中选择所有 DISTINCT by name 元素,其中字典 Attributes 键等于 Filters 列表中的任何值。

【问题讨论】:

到目前为止有什么努力吗? Find items from a list which exist in another list的可能重复 【参考方案1】:

现在,我要做的是选择所有 DISTINCT by name 元素 listA 其中字典 Attributes 键等于 过滤器列表。

要定义不同的属性,您可以使用按名称定义组并获取第一个。要定义过滤器,您可以使用字典中的Keys 属性来搜索过滤器列表中的任何键。

var result = listA.Where(x => x.Attributes.Keys.Any(a => Filters.Contains(a)))
                  .GroupBy(x => x.Name)
                  .Select(x => x.First())
                  .ToList();

【讨论】:

正是我需要的。谢谢!

以上是关于C# 从 List<T> 中选择存在于另一个列表中的所有元素的主要内容,如果未能解决你的问题,请参考以下文章

从 C# 中的 List<T> 中选择 N 个随机元素的算法[重复]

C#移除List<T> 指定List<T> 数据项

VBA 等效于 C# 中的 List<T> [重复]

CS0433: 类型 'List<T>' 存在于两者中

从 List<OwnStruct> 返回 List<T> 的方法,其中 List<T> 仅包含 List 中所有 OwnStructs 的一个属性(C#)[重复]

在 List<T> 中选择一周内没有休息日的记录 - C#