繁体   English   中英

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

[英]What is the equivalent of XML PATH and Stuff in Linq lambda expression (GROUP_CONCAT/STRING_AGG)?

我有这样一张桌子:

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

我需要查询这仿佛ITEMNAME是相同或不同的employeeidemployeename我们应该有项目,如“”分开。

就像下面给出的那个:

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屏幕Scuck的STUFF黑客,我无法OCR

任何人都可以帮助我将上述SQL查询转换为Lambda表达式吗?

我假设Lambda expression是指Linq语句(例如,对于EF或Linq2Sql)。

显示的FOR XML PATHSTUFF示例是解决Sql Server中缺少GROUP_CONCATLISTAGG问题 最后在Sql 2017中有STRING_AGG

您根本不需要在LINQ中重现hack - 而只是将感兴趣的员工组的所有行加载到内存中, GroupBy所需的键,然后在选择投影中使用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))
       });

employeeItemsEmployeeItems之间连接的投影:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM