我有两张桌子
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);
答案 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
};