【问题标题】:Get distinct columns with order by date获取按日期排序的不同列
【发布时间】:2011-03-25 20:47:12
【问题描述】:

我有以下两张表:

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 查询来实现这一点?任何帮助将不胜感激...

【问题讨论】:

  • 这是在 LINQ to SQL、实体框架、LINQ to Objects 中吗?

标签: c# linq distinct


【解决方案1】:

认为会是这样的:

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

【讨论】:

  • 感谢乔恩的快速回复。我在第一个 linq 语句中得到以下结果:工作:开发人员,日期:2010 年 12 月 31 日,公司:Google 工作:经理,日期:2010 年 12 月 1 日,公司:雅虎工作:下午,日期:11/29 /2010,公司:Microsoft 工作:助理,日期:2010 年 12 月 1 日,公司:Oracle 如您所见,oracle 工作应该在列表中排名第三,但不是。似乎它没有按日期正确排序。至于第二个查询,由于这一行,我无法编译它:CompanyName = jobsByCompany.Key.Name。再次感谢您的帮助。
  • @Emon:啊,我以为你只对每个公司的最新工作感兴趣。将编辑。
  • 谢谢乔恩。按预期工作。这真的很有帮助!
猜你喜欢
  • 1970-01-01
  • 2020-09-24
  • 1970-01-01
  • 2021-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多