如何只选择一行中只有两个值的明显组合的记录?
例如,说我有以下内容:
Name | Age | Height
------------------------------------
Joe 19 99
Kim 19 76
Joe 20 88
Joe 19 69
如何编写LINQ表达式以仅选择具有相同Name
和Age
的行?
我试过了:
var count = context.people.Where(p => (p.age && p.name).Distinct());
和var count = context.people.Where(p => (p.age.Distinct() && p.name.Distinct()));
这样做的正确方法是什么?
答案 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所提到的,这会为您提供基于Name
和Age
值的分组列表。然后,您可以添加.Select(g => g.Max(p => p.Height))
以获取类型List<Person>
的结果,其中包含每个姓名/年龄组中最高的结果。