如何在LINQ中正确使用GroupBy?

Byu*_*eng 13 linq linq-to-entities group-by

我有4个表:帖子,类别,关系和元

A category可以包含多个posts,并且它们之间的关系存储在Relation表中.然后,帖子可以有许多存储在Meta表格中的额外信息.我想列出所有带有类别和额外信息的帖子,然后按照帖子的ID对它们进行分组.

我有以下查询

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
Run Code Online (Sandbox Code Playgroud)

以及这些样本数据:

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
Run Code Online (Sandbox Code Playgroud)

然后结果将是

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
Run Code Online (Sandbox Code Playgroud)

我期待结果

PostID      Title     Categories               Meta

  1           A      Tips, Tricks    Key1=Value1, Key2=Value2
Run Code Online (Sandbox Code Playgroud)

我想知道我们是否可以将查询从SQL转换为LINQ to EntitiesEF v4,结果存储在这样的类中

class Result
{
  long ID,
  string Title,
  List<string> Categories,
  Dictionary<string, string> Meta
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

Nas*_*eer 1

您期望从查询中得到的最终结果是什么我个人更喜欢这样编写查询

 var q = from r in Relation
         join p in Post on r.Child equals p.ID
         join t in Term on r.Parent equals t.ID
         let x = new { p.ID, p.Title, t.Name }
         group x by x.ID into g
         select g;
Run Code Online (Sandbox Code Playgroud)

这样我认为(不确定)生成的sql会更简单