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