You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# LINQ GroupBy报错:变量info未定义问题咨询

解决LINQ GroupBy查询抛出的InvalidOperationException错误

问题代码

var entitiesGroups = await _context.ProductsDetailsStatisticsView
        .GroupBy(p => p.Id, (productDetailsId, info) => new
        {
            Key = productDetailsId,
            Info = info
        })
        .ToListAsync();

抛出的错误

Exception: System.InvalidOperationException: variable 'info' of type
'System.Collections.Generic.IEnumerable`1[ProductDetailsStatisticsEntity]'
referenced from scope '', but it is not defined

问题原因

EF Core无法将这种直接返回分组完整集合的GroupBy表达式转换为SQL语句。SQL的GROUP BY语法仅允许返回分组键和聚合计算结果(比如COUNT、SUM等),无法直接返回分组对应的所有原始行集合。你使用的GroupBy重载试图将整个分组的IEnumerable<ProductDetailsStatisticsEntity>直接映射到匿名对象的Info属性,这超出了EF Core能转换为SQL的能力范围。

解决方案

根据你的需求选择以下两种处理方式:

方式1:先加载数据到内存再分组(适合数据量不大的场景)

如果查询返回的数据量较小,可以先通过ToListAsync()将数据加载到内存,再进行GroupBy操作,LINQ to Objects支持返回完整分组集合:

var entities = await _context.ProductsDetailsStatisticsView.ToListAsync();
var entitiesGroups = entities
        .GroupBy(p => p.Id)
        .Select(g => new
        {
            Key = g.Key,
            Info = g.ToList()
        })
        .ToList();

方式2:使用EF Core支持的聚合操作(适合大数据量场景)

如果只需要分组后的聚合结果(比如统计数量、求和等),直接在GroupBy中使用EF Core支持的聚合函数,查询会转换为SQL在数据库端执行:

var entitiesGroups = await _context.ProductsDetailsStatisticsView
        .GroupBy(p => p.Id)
        .Select(g => new
        {
            Key = g.Key,
            Count = g.Count(),
            // 可添加其他聚合操作,比如Sum、Max等
        })
        .ToListAsync();

内容的提问来源于stack exchange,提问作者Ameer Sadek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 17:55:46