【问题标题】:SQL Server STRING_AGG() : equivalent in LinqSQL Server STRING_AGG() :在 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?

标签: c# sql-server linq string-aggregation sql-to-linq-conversion


【解决方案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 有这个支持。
猜你喜欢
  • 2019-06-30
  • 1970-01-01
  • 2011-01-08
  • 2021-09-08
  • 1970-01-01
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
  • 2018-08-27
相关资源
最近更新 更多