Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何使用LINQ根据两个字段的组合选择distinct?_Asp.net_Linq_Entity Framework 5_Where - Fatal编程技术网

Asp.net 如何使用LINQ根据两个字段的组合选择distinct?

Asp.net 如何使用LINQ根据两个字段的组合选择distinct?,asp.net,linq,entity-framework-5,where,Asp.net,Linq,Entity Framework 5,Where,如何仅选择一行中只有两个值的不同组合的记录 例如,假设我有以下几点: Name | Age | Height ------------------------------------ Joe 19 99 Kim 19 76 Joe 20 88 Joe 19 69 如何编写LINQ表

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

例如,假设我有以下几点:

Name     |     Age     |     Height
------------------------------------
Joe          19               99
Kim          19               76
Joe          20               88
Joe          19               69
如何编写LINQ表达式以仅选择具有相同
名称
年龄
的行

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


正确的方法是什么?

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

很明显,这不会给你一个高度,但是没有一个高度。如果您还想要所有高度,则需要分组:

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

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

对于linq中的这些场景,您应该使用
GroupBy

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

更新:

正如Jon Skeet所提到的,这为您提供了一个基于
Name
Age
值的分组列表。例如,您可以添加
。选择(g=>g.Max(p=>p.Height))
以获得类型
List
的结果,其中包含每个姓名/年龄组中最高的姓名/年龄组。

您期望的输出具体是什么样的?我认为这里不需要使用GroupBy,如果只需要姓名和年龄的话。@Jon Skeet:你说得对。但是,由于op提到选择行,我认为他也要包括高度。但在这种情况下,你的解决方案也失败了,因为它只选择了键(即姓名和年龄)
var result = people.GroupBy(p => new{p.Name, p.Age})