LINQ to entities查询不同表中的group by和count

时间:2014-07-30 05:34:09

标签: linq linq-to-sql linq-to-entities

我有两张桌子

1)记录

2)工作

两者的结构如下

日志: - id,Emailid,LogDate

  sampledata:-   1, a@a.com, jan24 1999
                 2, b@a.com, jan25 1999
                 3, a@a.com, jan25 1999  
                 4, c@a.com  jan26,1999
                 5, a@a.com  jan27,1999

工作: - jid,job_name,job_viewed_by

   sampledata:- j01, painter, a@a.com
                j02, teacher, a@a.com
                j01, painter, b@a.com   

job_viewed_by是作业表中的外键,与日志表中的Emailid相关。

现在我想要一个linq授权查询,它可以给我

最近记录的日志表中的所有Emailid以及他们查看的作业数(作业数)。

因此,根据以上样本数据,我的要求是

a@a.com最后登录于1999年1月27日,目前已查看过2个职位

b@a.com最后登录于1999年1月24日已查看过1个职位

c@a.com最后登录于1999年1月26日。没有找到工作

我知道如何在SQL中编写它,但我需要使用LinqtoEntities进行转换。

我尝试了一个查询,但它给了我最近登录次数而不是工作次数。

    var q=   (from p in context.Logs
              from x in context.ViewedJobs.Where(v=>p.EmailId ==v.ViewedBy)
              group p by p.EmailId into grp
              select new{ EmailId = grp.Key, 
                          LastDate = grp.Max(g => g.LogDate),
                          Count=grp.Count() }).OrderByDescending(m=>m.LogDate);

1 个答案:

答案 0 :(得分:2)

只是试着尝试:

var q = from p in context.Logs
        group p by p.Emailid into g
        select new 
        {
          EmailId=g.Key,
          LastDate= g.Max(x => x.LogDate),
          Count=context.ViewedJobs.Count(v=>v.ViewedBy==g.Key)
        };

更新版本:

var q = from p in context.Logs
        group p by p.Emailid into g
        join j in context.ViewedJobs 
        on g.Key equlas j.ViewedBy into leftGroup 
        select new 
        {
          EmailId=g.Key,
          LastDate= g.Max(x => x.LogDate),
          Count=leftGroup.Any()?leftGroup.Count():0
        };