C# 使用LINQ,选择每个组的第一个,创建具有特定列的新obj

C# 使用LINQ,选择每个组的第一个,创建具有特定列的新obj,c#,entity-framework,linq,C#,Entity Framework,Linq,我正在尝试从EF表中选择Id和描述,但使用distinct on Description 我意识到没有SelectFirst,但我认为这将有助于描述我正在尝试做的事情(我看到有人建议使用GroupBy/SelectFirst作为尝试将Distinct应用于特定列的一种方式): 最后,FirstOrDefault()不起作用(“无法从用法中推断参数”),并且我的属性(CertificationId/Description)无法识别。几乎,您必须在非分组属性上使用聚合。下面的代码使用Max,将根据每

我正在尝试从EF表中选择Id和描述,但使用distinct on Description

我意识到没有
SelectFirst
,但我认为这将有助于描述我正在尝试做的事情(我看到有人建议使用
GroupBy/SelectFirst
作为尝试将Distinct应用于特定列的一种方式):


最后,
FirstOrDefault()
不起作用(“无法从用法中推断参数”),并且我的属性(CertificationId/Description)无法识别。

几乎,您必须在非分组属性上使用聚合。下面的代码使用
Max
,将根据每个不同的
说明
返回最大的
CertificationId
。您可以将其更改为
Min
,以获得最小的
CertificationId

var results = _db.Certifications
        .GroupBy(c => c.Description)
        .Select(c => new SearchCriterion {Id = c.Max(y => y.CertificationId), Name = c.Key});

啊!!所以它知道使用哪个Id。谢谢
var results = _db.Certifications
        .GroupBy(c => c.Description)
        .Select(c => new SearchCriterion {Id = c.Max(y => y.CertificationId), Name = c.Key});