sql - Linq lambda 表达式 (GROUP_CONCAT/STRING_AGG) 中 XML PATH 和 Stuff 的等价物是什么?

标签 sql linq lambda substring for-xml-path

我有一张这样的 table :

EmployeeId  EmployeeName ItemName
4           Ganesh       Key Board
4           Ganesh       Processor
1           Jignesh      Key Board
1           Jignesh      Mouse
1           Jignesh      Processor
3           Rakesh       Key Board
2           Tejas        Key Board
2           Tejas        Mouse
2           Tejas        Processor

我需要查询这个,就好像相同 employeeid 的项目名称不同一样和 employeename我们应该将项目作为 ',' 分开。

就像下面给出的一样:
EmployeeId  EmployeeName ItemName
1           Jignesh      Key Board, Mouse, Processor
2           Tejas        Key Board, Mouse, Processor
3           Rakesh       Key Board
4           Ganesh       Key Board, Processor

这是用于此的 SQL 查询:
OPs Screen Scrape of STUFF hack which I couldn't OCR

谁能帮我将上述 SQL 查询转换为 Lambda 表达式?

最佳答案

我假设 Lambda expression你的意思是一个 Linq 语句(例如到 EF 或 Linq2Sql)。
FOR XML PATHSTUFF显示的示例是解决 GROUP_CONCAT or LISTAGG in Sql Server 缺失的解决方法.最后在 Sql 2017 中有 STRING_AGG

您根本不需要在 LINQ 中重现 hack - 相反,只需将感兴趣的员工集的所有行加载到内存中,GroupBy所需的 key ,然后使用 String.Join在选择投影中:

var result = db.EmployeeItems
      // If you have a filter add the .Where() here ...
      .GroupBy(e => e.EmployeeId)
      .ToList()
      // Because the ToList(), this select projection is not done in the DB
      .Select(eg => new 
       {
          EmployeeId = eg.Key,
          EmployeeName = eg.First().EmployeeName,
          Items = string.Join(",", eg.Select(i => i.ItemName))
       });

哪里employeeItemsEmployee 之间连接的投影和 Items :
var employeeItems = new []
{
   new EmployeeItem{EmployeeId = 1, EmployeeName = "Ganesh", ItemName = "Keyboard"},
   new EmployeeItem{EmployeeId = 1, EmployeeName = "Ganesh", ItemName = "Mouse"},
   new EmployeeItem{EmployeeId = 2, EmployeeName = "John", ItemName = "Keyboard"}
};

结果:
1 Ganesh Keyboard,Mouse
2 John   Keyboard

关于sql - Linq lambda 表达式 (GROUP_CONCAT/STRING_AGG) 中 XML PATH 和 Stuff 的等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30044945/

相关文章:

MySQL,限制连接一张表

python - 来自 python 的数据显示在一列而不是 ppostgresqll 上的两列

c# - MVC 强类型 IQueryable<IGrouping<TKey, TElement>> 模型

c++ - lambda 函数/表达式是否支持 constexpr?

python - 在 itertools.product 中使用 lambda 以获得更好的代码

SQL 不会打印出我的变量

mysql - SQL Fiddle 无法创建外键

c# - sql 在一个字符串匹配上连接两个表

c# - Linq 语法 - 选择多列

使用 lambda 的 Java 过滤器