SQL Server STRING_AGG() :等效于 Linq

问题描述

这是我的桌子 tbl_emp

enter image description here

这是我需要的结果:

enter image description here

sql Server 2017 中,我可以使用 STRING_AGG 来获得所需的结果:

SELECT 
    name,STRING_AGG(email,'') 'email',STRING_AGG(email2,'') 'email2'
FROM
    tbl_emp
GROUP BY 
    name

如何在 Linq 中获得相同的结果?任何帮助将不胜感激。

解决方法

有问题没有给出关于您正在使用的 ORM 的任何信息,所以我尝试在 linq to objects in c# 中展示这个案例的一个例子,而不是问题的完整解决方案

String_Agg 聚合函数采用一组值,并使用提供的分隔符将它们组合成一个字符串。在 LINQ (linq to objects) 中,您可以使用 Group By, 我认为这个例子可以帮助你:

class Program
    {
        static void Main(string[] args)
        {
            var emails = new List<EmailData>() { 
                new EmailData() {Name="Sam",Email="Email1" },new EmailData() {Name="Sam",Email="Email2" },new EmailData() {Name="Ted",Email="Email3" },Email="Email4" },Email="Email5" }
            };
            var grouping = emails.GroupBy(x => x.Name);
            foreach (var group in grouping)
            {
                Console.WriteLine(
                    $"{group.Key}: {string.Join(",",group.Select(x => x.Email))}");
            }
            Console.ReadKey();
        }
    }
    public class EmailData
    {
        public string Name { get; set; }
        public string Email { get; set; }
    }

结果:

enter image description here