使用 LINQ 获取 SQL 数据集的所有变量,这些变量是排序顺序的最大值

Get all the variables of a SQL Dataset that are the max of a sort order using LINQ

我在单个数据库中有数据 table 像这样:

Id        NameId      EndNumber    SortOrder
1         TestA       1            1
1         TestA       3            2
1         TestA       9            3
1         TestB       1            1
1         TestB       2            2
1         TestB       4            3
1         TestB       6            4
1         TestB       7            5
1         TestC       2            1
1         TestC       4            2
1         TestC       6            3

我有一个这样的 LINQ 查询:

result = _getService.QueryWithNoTracking<GetNamesId>()
    .Where(q => q.Id == myId && names.Contains(q.NameId)

我想 select 到 return 这个:

 Id      NameId      EndNumber
 1       TestA       9
 1       TestB       7
 1       TestC       6

我基本上想要每个 id/nameId 组合的最大排序顺序值。我了解 select 但不确定 if/how 使用 OrderBy 来实现此目的。

你可能会为此使用 groupby,而不是 OrderBy

result = _getService
  .QueryWithNoTracking<GetNamesId>()
  .Where(q => q.Id == myId && names.Contains(q.NameId))
  .GroupBy(gni => gni.NameId)
  .Select(g =>
    new  { 
      Id = g.First().Id,
      NameId = g.Key,
      EndNumber = g.Max(gni => gni.EndNumber)
    }
  );
      

LINQ 分组与 sql 略有不同。它采用单个项目列表并生成“列表列表”,其中内部列表中的每个项目都具有为键指定的相同 属性。通过对 NameId 进行分组,您可以获得一个列表列表,然后您可以通过丢弃内部列表中的大部分 EndNumbers 并仅保留最大值

将其变回单个列表