SQL 服务器 STRING_AGG() :在 Linq 中等效

SQL Server STRING_AGG() : equivalent in Linq

这是我的 table tbl_emp:

这是我需要的结果:

在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" },
                new EmailData() {Name="Sam", Email="Email4" },
                new EmailData() {Name="Sam", 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; }
    }

结果: