Entity Framework с агрегатом LINQ для объединения строки ?

Мне легко выполнить это в 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.

Кто-нибудь хочет взломать это?

14
задан Phil Figgins 18 November 2010 в 13:08
поделиться