2011-06-28 34 views
0

我有2个简单的实体Linq2Entities分组和计数

  1. 活动
  2. ActivityViews

次活动有2个属性ActivityID和日期。每次访问活动时,该实体都允许我查看。

我现在要编写一个LinqToEntity查询,该查询返回一个活动列表,以查看次数降序排列。

到目前为止,我想出了这个

var activities= ((from a in db.Activities 
        join av in db.ActivityViews on a.ID equals av.Activity.ID 
        group a by new { a } into g 
        select new { g, No = g.Count() }).OrderByDescending(x => x.No)).Select(x => x.g).ToList(); 

这样的作品,但它的返回annonymous类型的列表,我想一回活动类型的列表。我不想返回仅由它们命令的视图的数量。

编辑:我收回了我没有工作的所有,如果现在有一个活动ActivityViews没有得到返回。

回答

1

基本上,当你将你分组的任何东西分组是关键,所以如果你只是选择密钥,你会得到你所需要的。

这里将是一个解决方案。

var activities= 
    (
    (
     from a in db.Activities 
     join av in db.ActivityViews 
     on a.ID equals av.Activity.ID 
     group a by a into g 
     select new { 
      a = g.Key, 
      No = g.Count() } 
     ).OrderByDescending(x => x.No) 
).Select(x => x.a) 
    .ToList(); 

现在就着手简化它。

+0

同意bc你加入它:)。所以你想要一个左外连接? – Nix

+0

是的,对不起。没有意识到它也有这个问题 – Gavin

+0

感谢你的例子排序。谢谢 – Gavin