从列表中选择基于多个唯一字段

时间:2016-01-14 21:50:39

标签: c# linq list select

我目前有一个列表,其中包含具有字段的项目:“名称,描述,来源,标题......”。我想从此转储一个列表,但仅基于两个键,即名称和描述来唯一。基本上,我不希望列表中的项目具有相同的名称和相同的描述,但如果它们具有不同的名称和相同的描述,那么它没关系。

我用

查看了
 list.select(x => x.Name).Distinct() 

会给我一个具有不同名称的列表,但堆叠它们会违反其中一个唯一键不同,而且相同。

我也看了一下散列集,但我对它是如何工作完全感到困惑。

如果有人可以提供帮助,我们将不胜感激。

3 个答案:

答案 0 :(得分:2)

如果您只是寻找所有不同的名称/描述组合:

list.Select(x => new {x.Name, x.Description}).Distinct();

答案 1 :(得分:0)

您可以使用从HERE获取的以下示例:

IEnumerable<Person> filteredList = originalList
  .GroupBy(person => person.Name)
  .Select(group => group.First());

或者使用DistinctBy NuGet MoreLINQ

中的HERE

答案 2 :(得分:0)

var uniqueData = list.Select(x => new
            {
                UniqueKey = x.Name + " " + x.Description,
                Data = x,
            }).GroupBy(x => x.UniqueKey)
                .Select(g => g.First().Data)
                .ToList();

您应该使用一些唯一/特殊字符/字符串而不是&#34; &#34;确保UniqueKey非常独特。