Как правильно использовать GroupBy в LINQ?

У меня есть 4 таблицы: Сообщение, Категория, Связь и мета

Категория может содержать несколько сообщений , и связь между ними сохраняется в таблице Relation . Сообщение может содержать много дополнительной информации, которая хранится в Мета таблице. Я хочу перечислить все сообщения с категориями и дополнительной информацией, а затем сгруппировать их по идентификатору сообщения.

У меня есть следующий запрос

select p.ID, p.Title, t.Name, m.Key, m.Value from Post p
left join Relation r on p.ID = r.Child
left join Category c on r.Parent = c.ID
left join Meta m on p.ID = m.Object
where m.Type = 'news'
order by p.ID

и эти образцы данных:

Post

ID    Title

1     A

Category

ID    Name

1     Tips
2     Tricks

Meta

ID    Object  Key      Value

1       1     Key1     Value 1
2       1     Key2     Value 2

Relation

ID    Child Parent

1       1     1
2       1     2

, тогда результат будет

PostID      Title     Category       Key      Value

  1           A         Tips         Key1     Value1
  1           A         Tips         Key2     Value2
  1           A        Tricks        Key1     Value1
  1           A        Tricks        Key2     Value2

, и я ожидал результат будет

PostID      Title     Categories               Meta

  1           A      Tips, Tricks    Key1=Value1, Key2=Value2

Интересно, сможем ли мы преобразовать запрос из SQL в LINQ to Entities с EF v4, и результат будет сохранен в таком классе

class Result
{
  long ID,
  string Title,
  List<string> Categories,
  Dictionary<string, string> Meta
}

Любая помощь будет принята с благодарностью.

13
задан ByulTaeng 25 March 2011 в 17:47
поделиться