Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取按日期排序的不同列_C#_Linq_Distinct - Fatal编程技术网

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:啊,我还以为您只对每个公司的最新工作感兴趣呢。我会编辑的。谢谢你,乔恩。一切正常。这真的很有帮助!!