c# - LINQ 根据计数 >1 的另一列获取列
问题描述
我正在努力通过使用 Entity Framework Core 从数据库中查询 B 列的重复项来获取 A 列的值。例子:
Column A | Column B
--------------------
A | 1
B | 1
C | 2
D | 2
E | 3
我应该得到输出:
A,B,C,D
我打算用它来填充下拉列表。
我试过了:
Options = _context.table.AsEnumerable()
.GroupBy(s => new{ s.columnA,s.columnB)
.Where(o => o.columnB.Count() > 1)
.Select(o => new SelectListItem
{
Value = o.Key.columnA,
Text = o.Key.columnB
}.ToList()
解决方案
你只想指望columnB
你应该使用.GroupBy(s => s.columnB)
. 更新您的Where
&Select
如下所示。
注意需要在里面使用SelectMany
with Select
,因为如果我们使用Select
而不是SelectMany
它会返回List<List<SelectListItem>>
. SelectMany
将其压平并返回List<SelectListItem>
。
Options = _context.table.AsEnumerable()
.GroupBy(s => s.columnB)
.Where(o => o.Count() > 1)
.SelectMany(o => o.Select(x => new SelectListItem
{
Value = x.columnA,
Text = x.columnB
}))
.ToList();
来自有用评论的详细解释 归功于@Flater。
lambda inGroupBy
本质上是“组标识符”。在问题中,每个组由 A 列和B 列的组合唯一性定义。但是根据所描述的问题,它需要仅基于 B 列组合事物,目标是对事物进行专门分组,而不管A 列包含什么,所以列 A 不应包含在组的标识符中,因为查询在遇到不同的列 A 值时不应创建新组。
推荐阅读
- db2 - 为什么我的查询出现“SQL0134N 字符串列使用不当...”错误?
- python - 列表差异/麻烦绘图
- java - 处理失败的 Spring Cloud Task Launcher
- java - 如何在静态上下文中等待线程?
- xpath - 如何使用 TestCafé 编写包含 ID 的 xpath?
- svelte - 如何将数据从布局传递到 Sapper 中的页面?
- spring - Spring @RolesAllowed:返回 403 或 401,但不是 500 错误
- scala - 从 DB ResultSet 填充案例类
- reactjs - React Hook useCallback 不更新状态值
- android - Pixel 2 (Android 10) 在 Android Studio 上断开连接