如何在实体框架中加入groupby

问题描述:

在我的项目中,我为实体框架使用了代码优先的方法。如何在实体框架中加入groupby

我有两个表:

  • Tags:ID,姓名

  • Post:ID,标题,正文,List<tag>标签

各岗位能够有一些标签,和一些标签重复几个职位,这些表之间的关系是多对多的。

public class post 
{ 
    public int Id { get; set; } 
    public int Title { get; set; } 
    public int Body { get; set; } 

    public ICollection<Tag> Tags { get; set; } 
} 

public class Tag 
{ 
    public int Id { get; set; } 
    public int Name { get; set; } 

    public ICollection<Post> Posts { get; set; } 
} 

我用这个代码,但它是不行的:

var tags = db.posts.GroupBy(x => x.tags.Select(c => c.name)).Take(10).ToList(); 

我想获得前10名的标签,但我不能这样做。

我想EF做不LINQ

我在网上搜索,但找不到任何类似的问题。

谢谢。

+0

显示您的类的结构和你试过到目前为止 –

+0

@FabioLuz更新 –

尝试:

var query = (from t in ctx.Tags.Include("Posts") 
      orderby t.Posts.Count() descending 
      select t).Take(10).ToList(); 
+0

查询得到的所有排名前10位的标签是什么。我想获得前10名的标签。例如“c#”3次,而“mvc”第一次使用10次和其他用途,我想通过使用例如“mvc”来命令第一次。 –

+0

您的查询为每个标签返回“1”。你应该通过'Post'加入表 –

+0

你不必使用group by。我编辑了答案。那是你需要的吗? –