[英]Get the latest record in join linq c#
I have this query 我有这个查询
return from fitUpExaminationDetails in _ctx.FitUpExaminationDetails
where fitUpExaminationDetails.FitUpExaminationId == Id
join joint in _ctx.Joints on fitUpExaminationDetails.JointId equals joint.Id
join line in _ctx.Lines on joint.LineId equals line.Id
join fileIsoManager in _ctx.FileIsoManagers on line.Id equals fileIsoManager.LineId
select new ViewDomainClass.QualityControl.Report.ViewFitupExaminationReport
{
HeatNumber1 = fitUpExaminationDetails.HeatNumber1,
HeatNumber2 = fitUpExaminationDetails.HeatNumber2,
JointNumber = joint.JointNumber,
LineNumber = line.LineNumber,
Revision = fileIsoManager.Revision,
};
My line
tables can have multi fileIsoManager
records.So in the select statement i mean in this part Revision = fileIsoManager.Revision
i want to show the latest record in fileIsoManager
table .how can i change this query to do that ? 我的line
表可以有多个fileIsoManager
记录。所以在select语句中,我的意思是在这部分中Revision = fileIsoManager.Revision
我想显示fileIsoManager
表中的最新记录。 fileIsoManager
更改此查询来做到这一点?
Ok, since you didn't provide much details, i've wrote a few classes to show you how to get your latest revision for each line. 好的,由于您没有提供太多详细信息,因此我编写了一些类来向您展示如何获取每一行的最新修订。 Pay attention to the "main" function. 注意“主要”功能。
// These are a representation of your classes :
public class Line
{
public int LineId { get; set; }
public string SomeValue { get; set;}
}
public class Revision
{
public int RevisionId { get; set; }
public int LineId { get; set;}
}
void Main()
{
// generating some data so we can test the query.
var lines = new List<Line>() {
new Line() { LineId = 1, SomeValue = "Allo!" }
};
var revisions = new List<Revision>() {
new Revision() { LineId = 1, RevisionId = 1 },
new Revision() { LineId = 1, RevisionId = 2 },
new Revision() { LineId = 1, RevisionId = 3 }
};
var result = (
from line in lines
join revision in revisions on line.LineId equals revision.LineId
group revision by line into grp
select new
{
Line = grp.Key,
LastRevision = grp.OrderByDescending(rev => rev.RevisionId).FirstOrDefault()
}
).ToList();
}
So, basically, you need to group your revisions by line. 因此,基本上,您需要按行对修订进行分组。 In the select part, you can then get the latest revision for each line. 然后,在选择部分中,您可以获得每行的最新修订。
In this example, result
will contain a dynamic object containing the line id=1 and the revision id = 3. 在此示例中, result
将包含一个动态对象,该对象包含行id = 1和修订版id = 3。
Going back to your query, it should look like this to get a similar result : 回到您的查询,它应该看起来像这样以获得类似的结果:
return
from fitUpExaminationDetails in _ctx.FitUpExaminationDetails
where fitUpExaminationDetails.FitUpExaminationId == Id
join joint in _ctx.Joints on fitUpExaminationDetails.JointId equals joint.Id
join line in _ctx.Lines on joint.LineId equals line.Id
join fileIsoManager in _ctx.FileIsoManagers on line.Id equals fileIsoManager.LineId
group fileIsoManager by new { fitUpExaminationDetails, joint, line} into grp
select new ViewDomainClass.QualityControl.Report.ViewFitupExaminationReport
{
HeatNumber1 = grp.Key.fitUpExaminationDetails.HeatNumber1,
HeatNumber2 = grp.Key.fitUpExaminationDetails.HeatNumber2,
JointNumber = grp.Key.joint.JointNumber,
LineNumber = grp.Key.line.LineNumber,
Revision = grp.OrderByDescending(fileIsoMgr => gileIsoMgr.Id).FirstOrDefault()
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.