SQL Server STRING_AGG() :在 Linq 中等效

Posted

技术标签:

【中文标题】SQL Server STRING_AGG() :在 Linq 中等效【英文标题】:SQL Server STRING_AGG() : equivalent in Linq 【发布时间】:2021-09-17 19:15:27 【问题描述】:

这是我的桌子tbl_emp

这是我需要的结果:

在 SQL Server 2017 中,我可以使用STRING_AGG 来获得想要的结果:

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

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

【问题讨论】:

根据我们掌握的数据的图片,你不就是在MAX这个值之后吗? 不,不是最大值。我需要 GROUP BY 名称和 CONCAT 电子邮件列。这就是我提到 STRING_AGG 函数的原因。 你可能想举出你有 other 值然后NULL 的例子,因为MAX 会在这里给出相同的结果。 根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或键入问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。请展示您尝试过的内容,并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。 为什么不将其保留为 SQL?为什么要使用 LINQ? 【参考方案1】:

有问题没有给出有关您正在使用的 ORM 的任何信息,所以我尝试在 linq 中展示一个示例来说明这种情况,以使用 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; 
    

结果:

【讨论】:

不要回答原来的问题。 我展示了例子,我没有给出完整的解决方案)) LINQ to Objects != LINQ to Entities。您的代码不会生成 SQL 查询。 不适用于 EF Core。 linq2db 有这个支持。 让我们continue this discussion in chat.

以上是关于SQL Server STRING_AGG() :在 Linq 中等效的主要内容,如果未能解决你的问题,请参考以下文章

2017 年之前 SQL Server 的 String_agg

SQL Server - 带有 string_agg 的索引视图

sql server 2016 中的 String_agg

在 SQL Server 中使用 STRING_AGG 获取唯一值

在 SQL Server 中使用 STRING_AGG 获取唯一值

SQL Server STRING_AGG 函数排序未按预期工作