Return 基于数组中某些属性的唯一(不同)元素

Return only unique(distinct) element based on certain properties from an array

我正在寻找一种方法 return 仅在数组中使用不同的元素,但必须基于某个 属性,数组的其他属性可以复制。 例如:

var elements = [{id:123,name:"abc",start:12:00:00},{id:123,name:"abc",start:12:00:00},
{id:123,name:"abc",start:1:00:00},{id:123,name:"def",start:12:00:00}]

我们只想 return 基于唯一开始时间和名称的结果:

[{id:123,name:"abc",start:12:00:00},{id:123,name:"abc",start:1:00:00},{id:123,name:"def",start:12:00:00}]

每个元素的 属性 名称或开始必须不同 {id:123,name:"abc",start:12:00:00} => 是 returned只有一次,因为有两个元素具有相同的名称和开始。

我寻找 DistinctBy 功能,但它不允许我使用该功能。只有 Distinct() 函数。

最简单的方法是使用 GroupBy,因此如果您想要一个独特的名称或开头,您可以这样做:

var elements = [
    {id:123,name:"abc",start:12:00:00},
    {id:123,name:"abc",start:12:00:00},
    {id:123,name:"abc",start:1:00:00},
    {id:123,name:"def",start:12:00:00}
];
var unique = elements
    .GroupBy(e => new {e.name, e.start})
    .Select(g => g.First())
    .ToArray(); // or ToList, or just leave it as an IEnumerable