简体   繁体   English

在join linq C#中获取最新记录

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM