C# 获取按日期排序的不同列
我有以下两个表格:C# 获取按日期排序的不同列,c#,linq,distinct,C#,Linq,Distinct,我有以下两个表格: Job Title | PostDate | CompanyId Assitant | 12/15/10 | 10 Manager | 12/1/10 | 11 Developer | 12/31/10 | 10 Assitant | 12/1/10 | 13 PM | 11/29/10 | 12 CompanyId | Name 10 | Google 11 | Yahoo 12 | Microsoft
Job Title | PostDate | CompanyId
Assitant | 12/15/10 | 10
Manager | 12/1/10 | 11
Developer | 12/31/10 | 10
Assitant | 12/1/10 | 13
PM | 11/29/10 | 12
CompanyId | Name
10 | Google
11 | Yahoo
12 | Microsoft
13 | Oracle
现在我想得到3个不同的公司,他们的工作按发布日期排序。结果表如下:
Job Title | PostDate | CompanyName
Developer | 12/31/10 | Google
Manager | 12/1/10 | Yahoo
Assitant | 12/1/10 | Oracle
如何使用linq查询实现这一点?任何帮助都将不胜感激……我想这应该是:
var query = from company in db.Companies
join job in db.Jobs on company.CompanyId equals job.CompanyId
group job by company into jobsByCompany
let lastJob = jobsByCompany.OrderByDescending(x => x.PostDate)
.First()
orderby lastJob.PostDate descending
select new
{
JobTitle = lastJob.JobTitle,
PostDate = lastJob.PostDate,
CompanyName = jobsByCompany.Key.Name
};
先加入一个组,然后加入一个组,这有点奇怪-我们可以先加入一个组,然后放弃空选项:
var query = from company in db.Companies
join job in db.Jobs on company.CompanyId equals job.CompanyId
into jobsByCompany // Make this a group join
let lastJob = jobsByCompany.OrderByDescending(x => x.PostDate)
.FirstOrDefault()
where lastJob != null
orderby lastJob.PostDate descending
select new
{
JobTitle = lastJob.JobTitle,
PostDate = lastJob.PostDate,
CompanyName = company.Name
};
编辑:请注意,这不仅仅是排名前三的结果。使用
query=query.Take(3)
只获取前三个结果。这是LINQ to SQL、实体框架、LINQ to Objects中的结果吗?感谢Jon的快速回复。我在linq的第一个声明中得到了以下结果:Job:Developer,日期:2010年12月31日,Company:Google Job:Manager,日期:2010年12月1日,Company:Yahoo Job:PM,日期:2010年11月29日,Company:Microsoft Job:Assistant,日期:2010年12月1日,Company:Oracle正如你所看到的,Oracle Job应该是列表中的#3,但不是。似乎它没有按postdate正确排序。至于第二个查询,我无法编译它,因为这行代码:CompanyName=jobsByCompany.Key.Name。再次感谢您的帮助。@Emon:啊,我还以为您只对每个公司的最新工作感兴趣呢。我会编辑的。谢谢你,乔恩。一切正常。这真的很有帮助!!