按日期顺序获取不同的列

时间:2011-03-25 20:47:12

标签: 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
13        | Oracle

现在我希望得到3家不同的公司,按工作日期排序。结果表如下:

Job Title | PostDate | CompanyName
Developer | 12/31/10 | Google
Manager   | 12/1/10  | Yahoo
Assitant  | 12/1/10  | Oracle

如何使用linq查询实现这一目标?任何帮助将不胜感激......

1 个答案:

答案 0 :(得分:2)

认为会是这样的:

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
            };

进行连接然后是一个组有点奇怪 - 我们可以改为使用GroupJoin,但随后丢弃空选项:

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);获取前三个结果。