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; }
}
结果:
这是我的 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; }
}
结果: