如何在LINQ中正确使用GroupBy?
我有 4 个表:Post、Category、Relation 和 Meta
一个 category
可以包含多个 post
,它们之间的关系存储在 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
和这些示例数据:
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
我想知道我们是否可以使用 EF v4 和结果将查询从 SQL 转换为 LINQ to Entities
存储在这样的类中
class Result
{
long ID,
string Title,
List<string> Categories,
Dictionary<string, string> Meta
}
任何帮助将不胜感激。
I have 4 tables: Post, Category, Relation and Meta
A category
can contains multiple posts
, and the relation between them is stored in Relation
table. A post then can has many extra info that are stored in Meta
table. I want to list all post with categories and extra infos, then group them by post's ID.
I have the following query
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
and with these sample data:
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
then the result will be
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
and I expected the result to be
PostID Title Categories Meta
1 A Tips, Tricks Key1=Value1, Key2=Value2
I wonder if we can convert the query from SQL to LINQ to Entities
with EF v4 and the result is stored in a class like this
class Result
{
long ID,
string Title,
List<string> Categories,
Dictionary<string, string> Meta
}
Any helps would be appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您期望查询的最终结果是什么
我个人更喜欢这样编写查询
我认为(不确定)生成的sql会更简单
What's the final result you expect from the query
I personally prefer to write the query like
this way I think (not sure) the sql generated will be simpler
现在您想要使用 EntityFramework,您只需要设置数据库、edmx 以及带有 ID 和标题的结果表,然后设置类别和元表。然后将结果表中的一对多关系添加到每个类别和元表中。
Now that you're wanting to use EntityFramework, you would merely need to set up you database, edmx with a Result table with an ID and a Title, then Category and Meta tables. Then add one-to-many relationships from the Result table to each the Category and Meta tables.
我不是 100% 确定你要做什么,但显然如果你要分组,结果必须按结果集中的任何内容进行分组,或者是聚合数据。此查询将检索结果并按 PostId、PostTitle 和 CategoryName 进行分组,生成单个 SQL 语句:
这是此语句生成的 SQL:
这是原始语句生成的 SQL:
I'm not 100% sure what you're trying to do, but obviously if you're grouping, the results have to be grouped by anything in the resultset, or be aggregated data. This query will retrieve your results and group by PostId, PostTitle, and CategoryName, generating a single SQL Statement:
Here is the SQL Generated by this statement:
Here is the SQL Generated by your original statement: