gpt4 book ai didi

c# - Entity Framework 与 LINQ 聚合连接字符串?

转载 作者:可可西里 更新时间:2023-11-01 07:54:54 26 4
gpt4 key购买 nike

这对我来说在 TSQL 中很容易执行,但我只是坐在这里用头撞 table 试图让它在 EF4 中工作!

我有一张表,我们称它为 TestData。它有字段,比如:DataTypeID、Name、DataValue。

DataTypeID, Name, DataValue
1,"Data 1","Value1"
1,"Data 1","Value2"
2,"Data 1","Value3"
3,"Data 1","Value4"

我想对 DataID/Name 进行分组,并将 DataValue 连接成一个 CSV 字符串。期望的结果应该包含 -

DataTypeID, Name, DataValues
1,"Data 1","Value1,Value2"
2,"Data 1","Value3"
3,"Data 1","Value4"

现在,这是我正在尝试的方式 -

var query = (from t in context.TestData
group h by new { DataTypeID = h.DataTypeID, Name = h.Name } into g
select new
{
DataTypeID = g.Key.DataTypeID,
Name = g.Key.Name,
DataValues = (string)g.Aggregate("", (a, b) => (a != "" ? "," : "") + b.DataValue),
}).ToList()

问题是 LINQ to Entities 不知道如何将其转换为 SQL。这是 3 个 LINQ 查询联合的一部分,我真的很希望它保持这种状态。我想我可以检索数据,然后再执行聚合。出于性能原因,这对我的应用程序不起作用。我还考虑过使用 SQL 服务器函数。但这在 EF4 世界中似乎并不“正确”。

有人愿意尝试一下吗?

最佳答案

如果 ToList() 是您原始查询的一部分,而不只是为该示例添加的,则使用 LINQ to Objects 在结果列表上进行聚合:

var query = (from t in context.TestData
group t by new { DataTypeID = t.DataTypeID, Name = t.Name } into g
select new { DataTypeID = g.Key.DataTypeID, Name = g.Key.Name, Data = g.AsEnumerable()})
.ToList()
.Select (q => new { DataTypeID = q.DataTypeID, Name = q.Name, DataValues = q.Data.Aggregate ("", (acc, t) => (acc == "" ? "" : acc + ",") + t.DataValue) });

在 LINQPad 中测试并产生以下结果:

alt text

关于c# - Entity Framework 与 LINQ 聚合连接字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4215066/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com