LINQ分组依据和组之间的交集C#

qlckcl4x  于 2023-02-06  发布在  C#
关注(0)|答案(1)|浏览(207)

我把下面的list转换成C#:

table_schema | table_name | field_name | field_type
public         tableA       fieldA       character varying
public         tableA       fieldB       timestamp
public         tableA       fieldC       bytea
public         tableB       fieldA       character varying
public         tableB       fieldD       integer
other          tableC       fieldA       character varying
other          tableC       fieldE       integer

因此,名称为fieldA且类型为character varying的字段对所有人都存在。
输出应为列表对象:

field_name | field_type
fieldA       character varying
mwg9r5ms

mwg9r5ms1#

我建议GroupByAggregate所有这些组,而Intersect他们的内容:

var list = ...

var result = list
  .GroupBy(item => (item.table_schema, item.table_name),
           item => (item.field_name, item.field_type))
  .Select(group => group.AsEnumerable()) 
  .Aggregate((current, item) => current.Intersect(item))
  .ToList(); // <- Let's have a list of tuples

唯一的窍门就是排队

.Select(group => group.AsEnumerable())

我们不希望按IGrouping<K, V>进行聚合,而是按更一般的IEnumerable<V>进行聚合

相关问题