Это легко для меня выполнить в TSQL, но я просто сижу здесь, стуча себя в спину, пытаясь заставить его работать в 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. Это часть объединения трех запросов LINQ, и мне бы очень хотелось, чтобы это было так. Я предполагаю, что я мог бы получить данные, а затем выполнить агрегат позже. По соображениям производительности это не сработает для моего приложения. Я также рассмотрел использование функции SQL-сервера. Но это просто не кажется "правильным" в мире EF4.
Кто-нибудь может взломать это?