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

如何在Entity Framework LINQ查询中实现T-SQL的CASE WHEN逻辑?

T-SQL转EF LINQ时CASE WHEN分组逻辑的正确实现

原T-SQL的核心逻辑是按a.Number分组后,统计每组中不同b.Id、c.Id的数量,再根据数量判断返回'MULTIPLE'或对应字段的最大值。你之前的LINQ错误在于没有做分组操作,且误用了Count()——你写的b.Test.Count()是计算字符串长度,而非分组后不同Id的数量,这才导致每次都返回'MULTIPLE'。

正确的LINQ查询写法

var results = await (from a in dbContext.table1
                     join b in dbContext.table2 on a.Id equals b.Id
                     join c in dbContext.table3 on b.Id equals c.Id
                     where a.Number == 150
                     // 按a.Number分组,将关联的b、c数据纳入分组
                     group new { b, c } by a.Number into grouped
                     select new GetDataclass
                     {
                         Value1 = grouped.Key,
                         // 统计分组中不同b.Id的数量,判断后返回对应值
                         Value2 = grouped.Select(x => x.b.Id).Distinct().Count() > 1 
                             ? "MULTIPLE" 
                             : grouped.Max(x => x.b.Test),
                         // 统计分组中不同c.Id的数量,判断后返回拼接姓名的最大值
                         Value3 = grouped.Select(x => x.c.Id).Distinct().Count() > 1 
                             ? "MULTIPLE" 
                             : grouped.Max(x => x.c.FirstName + " " + x.c.LastName)
                     }).ToListAsync();

关键说明

  1. 分组操作:必须通过group ... by ... into完成分组,对应原T-SQL的GROUP BY a.Number
  2. 统计distinct数量:用Select(x => x.b.Id).Distinct().Count()对应原T-SQL的COUNT(DISTINCT b.Id)
  3. 取最大值:用grouped.Max(...)对应原T-SQL的MAX(...),确保分组后取字段的最大值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 12:00:06