2

如何仅选择在一行中只有两个值的不同组合的记录?

例如,假设我有以下内容:

Name     |     Age     |     Height
------------------------------------
Joe          19               99
Kim          19               76
Joe          20               88
Joe          19               69

我如何编写一个 LINQ 表达式来仅选择具有相同NameAND的行Age

我试过: var count = context.people.Where(p => (p.age && p.name).Distinct());var count = context.people.Where(p => (p.age.Distinct() && p.name.Distinct()));

这样做的正确方法是什么?

4

2 回答 2

7

您可以将姓名和年龄选择为匿名类型,然后使用Distinct()

var results = context.people
                     .Select(p => new { p.Name, p.Age })
                     .Distinct();

显然这不会给你高度,但是没有单一的高度。如果您还想要所有高度,则需要进行分组:

var results = context.people
                     .GroupBy(p => new { p.Name, p.Age });

这将为您提供一系列分组,其中每个分组包含所有具有相同姓名和年龄的人。

于 2013-03-28T20:38:31.513 回答
0

您应该GroupBy在 linq 中使用这些场景:

var result = people.GroupBy(p => new{p.Name, p.Age})

.Select(g => g.Key)

更新:
正如 Jon Skeet 提到的,这为您提供了基于NameAge值的分组列表。然后,您可以例如添加.Select(g => g.Max(p => p.Height))以获取List<Person>包含每个名称/年龄组中最高的类型的结果。

于 2013-03-28T20:39:24.570 回答