C# 如何根据LINQ to实体中的max value和where子句选择记录

C# 如何根据LINQ to实体中的max value和where子句选择记录,c#,linq-to-entities,C#,Linq To Entities,我的表tbl_JobMaster中有以下记录 ID CIN JobNumber Version 1 ABC 100 1.0 2 ABC 100 2.0 3 ABC 200 1.0 4 ABC 200 2.0 5 ABC 200 3.0 6 XYZ 300 1.0 我想要基于CIN列、MAXVersio

我的表tbl_JobMaster中有以下记录

ID  CIN   JobNumber Version
1   ABC   100           1.0     
2   ABC   100           2.0 
3   ABC   200           1.0     
4   ABC   200           2.0
5   ABC   200           3.0
6   XYZ   300           1.0
我想要基于CIN列、MAXVersion和唯一JobNumber的记录列表

var temp = from job in entity.tbl_JobMaster
           where job.CIN == "ABC"
           group job by new { job.CIN, job.JobNumber } into g
           select g;
例如,CIN=ABC 所以输出应该如下

ID  CIN   JobNumber Version
2   ABC   100           2.0 
5   ABC   200           3.0
我尝试了以下代码,但不起作用

var result=(from job in entity.tbl_JobMaster
            where job.CIN=="ABC" && job.Version==entity.tbl_JobMaster.Where(p=>p.ID==job.ID).Max(p=>p.Version)
            select job).Distinct();

您的查询应该如下所示

var result = (from job in entity.tbl_JobMaster
    where job.CIN == "ABC" && job.Version == entity.tbl_JobMaster.Where(p => p.CIN == job.CIN && p.JobNumber == job.JobNumber).Max(p => p.Version)
    select job).Distinct();

第一组按CIN和工号分组

var temp = from job in entity.tbl_JobMaster
           where job.CIN == "ABC"
           group job by new { job.CIN, job.JobNumber } into g
           select g;
然后按版本降序将项目分组,并选择第一个项目

var result = temp.Select(o => o.OrderByDescending(t => t.Version).First());

下面是一个使用LINQ扩展方法的示例:

var selection = entity.tbl_JobMaster
  .Where(job => job.CIN == "ABC")
  .GroupBy(job => job.JobNumber)
  .Select(group => group
    .OrderByDescending(job => job.Version)
    .First()
);

您可以按JobNumber分组,然后获取最大值。Version属性的类型是什么?Version属性的类型是decimal