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

请求协助将指定SQL查询转换为LINQ或Lambda表达式

没问题,我帮你把这个统计类的SQL转换成LINQ(包括Lambda表达式和查询语法两种写法),先理清楚你的需求:就是统计QualityOfService字段里各个评级(Excellent、VeryGood、Good、Bad等)的数量,同时返回固定的分类名称'Quality Of Service'对吧?

Lambda表达式写法

假设你的实体类是YourEntity,对应的数据库上下文集合是dbContext.YourEntities,可以这么写:

var stats = dbContext.YourEntities
    // 用固定值1分组,相当于把所有数据归为一组,实现全局统计(对应SQL里无GROUP BY的情况)
    .GroupBy(_ => 1)
    .Select(group => new 
    {
        Category = "Quality Of Service", // 对应SQL里的MAX('Quality Of Service'),直接赋值固定值即可
        Excellent = group.Count(t => t.QualityOfService == "Excellent"),
        Very_Good = group.Count(t => t.QualityOfService == "VeryGood"),
        Good = group.Count(t => t.QualityOfService == "Good"),
        Bad = group.Count(t => t.QualityOfService == "Bad")
        // 如果SQL里还有更多评级的统计,继续在这里添加对应的Count语句就行
    })
    .FirstOrDefault(); // 因为只有一组结果,取第一个(或默认值)

LINQ查询语法写法

如果你习惯用查询式的LINQ,也可以这么写:

var stats = (from t in dbContext.YourEntities
             // 同样用固定值分组实现全局统计
             group t by 1 into serviceGroup
             select new 
             {
                 Category = "Quality Of Service",
                 Excellent = serviceGroup.Count(t => t.QualityOfService == "Excellent"),
                 Very_Good = serviceGroup.Count(t => t.QualityOfService == "VeryGood"),
                 Good = serviceGroup.Count(t => t.QualityOfService == "Good"),
                 Bad = serviceGroup.Count(t => t.QualityOfService == "Bad")
                 // 其他评级的统计逻辑同理添加
             }).FirstOrDefault();

补充说明

SQL里的MAX('Quality Of Service')其实就是个固定字符串,因为所有行的这个值都一样,所以直接赋值即可,不用调用MAX函数。而LINQ里的Count(条件)就对应SQL里的COUNT(CASE WHEN ... THEN 1 END),只有符合条件的行会被计数,不符合的不会计入结果,效果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:24:08