使用 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 并仅保留最大值
将其变回单个列表
我在单个数据库中有数据 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 并仅保留最大值
将其变回单个列表