如何根据LINQ两个字段的组合选择不同的?

时间:2013-03-28 20:34:41

标签: asp.net linq entity-framework-5 where

如何只选择一行中只有两个值的明显组合的记录?

例如,说我有以下内容:

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

如何编写LINQ表达式以仅选择具有相同NameAge的行?

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

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

2 个答案:

答案 0 :(得分:6)

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

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

显然,这不会给你高度,但那时 没有单一高度。如果你想要所有的高度,你需要改为分组:

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

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

答案 1 :(得分:0)

您应该在linq中使用GroupBy这些方案:

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

。选择(g => g.Key)

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