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

如何将指定SQL聚合查询转换为LINQ语句实现数据库记录查询

将SQL分组拼接逻辑转换为LINQ实现

原SQL功能说明

原SQL通过按植物名称(对应表中Item字段)、学名(对应表中Botanical Name字段)分组,将同一类植物的不同种植地点(对应表中Location字段)去重后拼接成字符串,同时生成Item字段为名称与学名的拼接结果。

表结构(planting表)

IdItemBotanical NameLocation
1AppleMalus sppBlock C
2CoffeeCoffeaBlock A
3CoffeeCoffeaBlock B
4AppleMalus sppBlock B

预期输出

IdItemLocation
1Apple, Malus sppBlock C, Block B
2Coffee, CoffeaBlock A, Block B

LINQ实现代码

修改原框架代码,通过分组+字符串拼接实现对应逻辑:

public IActionResult UrlDatasource([FromBody] DataManagerRequest dm)
{
    // 分组并处理拼接逻辑
    var dataSource = _context.planting
        .GroupBy(p => new { p.Item, p.BotanicalName }) // 按Item和BotanicalName分组,对应原SQL的分组逻辑
        .Select((group, index) => new 
        {
            Id = index + 1, // 生成自增Id
            Item = $"{group.Key.Item}, {group.Key.BotanicalName}",
            Location = string.Join(", ", group.Select(p => p.Location).Distinct()) // 去重后拼接地点
        })
        .ToList();

    DataOperations operation = new DataOperations();            
    return dm.RequiresCounts ? Json(new { result = dataSource }) : Json(dataSource);
}

代码说明

  1. 分组逻辑:通过GroupBy按Item和BotanicalName分组,对应原SQL的GROUP BY Name, Variety, Botanical。
  2. 拼接处理:
    • Item字段直接拼接分组键的Item和BotanicalName,对应原SQL的CONCAT(Name, ', ', Variety)。
    • Location字段通过string.Join拼接分组内去重后的Location值,对应原SQL中STUFF+子查询的拼接逻辑。
  3. 自增Id:通过分组的索引生成预期输出中的自增Id。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:20:36