C# 如何根据LINQ to实体中的max value和where子句选择记录
我的表tbl_JobMaster中有以下记录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
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