如何创建LINQ查询以从对象字段内的数组生成唯一的对象列表?

knsnq2tg  于 2022-12-15  发布在  其他
关注(0)|答案(2)|浏览(132)

我有一系列的文件对象,它们都有一个签名者对象数组作为字段,对于包对象,我需要在包中包含的每个文件中包含一个所有签名者对象的数组。
目前,我正在使用这段代码来实现相同的结果,但是我认为使用LINQ可以简化和改进这一点。

foreach(var file in files) {    
   holder.AddRange(file.signers); 
} 
holder.Select(x => x).Distinct();
hlswsv35

hlswsv351#

您可以使用SelectMany将签名者扁平化到一个列表中。
也没有必要执行.Select(x => x),它本质上是一个无操作。

holder
  .AddRange(files.SelectMany(file => file.signers))
  .Distinct();

哈希集版本

使用@Selvin建议的HashSet作为HashSet不能包含重复条目,因此不需要任何与Distinct()等效的项

// Earlier
HashSet<T> holder;

holder.UnionWith(files.SelectMany(file => file.signers));
von4xj4u

von4xj4u2#

试试这个

files
 .Select(file => file.signers) //For each file in files return the file.signers prop
 .SelectMany(signers => signers) //Flatten the multiple enumerables of signer to one enumerable of strings
 .Distinct()
 .ToArray(); // Cast enumerable to Array

相关问题