使用LINQ选择具有唯一ID的对象作为另一种对象类型

时间:2019-08-27 06:36:21

标签: c# linq

我正在使用LINQ选择唯一的Customer作为Person对象。在下面的示例中,我使用JSON数据,但是在POCO中使用C#对象。在此示例中,我选择了JSON来使事情保持简单。

我有以下Customer列表:

[
  {
     "id": 123,
     "name: "John Smith",
     "transactionDate": "2019-08-21T10:30",
     "amount": 8.50
  },
  {
     "id": 234,
     "name: "Jane Doe",
     "transactionDate": "2019-08-22T18:21",
     "amount": 75.00
  },
  {
     "id": 123,
     "name: "John Smith",
     "transactionDate": "2019-08-26T10:30",
     "amount": 10.00
  }
]

我想将唯一客户作为Person对象,其结果应如下所示:

[
  {
     "id": 123,
     "name": "John Smith"
  },
  {
     "id": 234,
     "name": "Jane Doe"
  }
]

以下应该给我唯一的ID。

var uniqueIds = customers.Select(x => x.id).Distinct();

现在如何从Person中提取唯一的List<Customer>()

2 个答案:

答案 0 :(得分:1)

一种方法是使用GroupBy

var uniquePersons = customers
    .GroupBy(c => new Person() {Id = c.Id, Name = c.Name})
    .Select(g => g.Key)
    .ToList();

答案 1 :(得分:1)

建议的答案或其他SO帖子未返回我需要的结果。这是有效的代码。

var uniquePersons = customers
                        .Select(x => new Person() { Id = x.Id, Name = x.Name })
                        .GroupBy(g => g.Id)
                        .Select(x => x.First())
                        .ToList();

我并不是说这是最好的方法,但这是给我一个Person列表中唯一的Customer列表的原因。

我很想听听建议或解释,这是处理它的最佳方法,还是为什么建议的答案没有产生一个独特的人List<Person>()