Мне легко выполнить это в TSQL, но я просто сижу здесь, бьюсь головой о стол, пытаясь заставить его работать в EF4!
У меня есть table, назовем его 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.
Кто-нибудь хочет взломать это?