2012-12-30 158 views
0

我們的表結構如下所示:LINQ查詢,選擇最新的記錄

appointmentID  

1abc --------------->1    
1abc (latest) ------------>2    
1hjt    
990aa    
990aa    
990aa (latest    

DateTime start = DateTime.Now.AddDays(0); 
DateTime end = DateTime.Now.AddDays(7)); 

List<JobCustomers> appointments = objectContext.JobCustomers.Where(
        a => a.StartTime >= start && a.EndTime <= end && !string.IsNullOrEmpty(a.AppointmentId)).ToList(); 

foreach (JobCustomers appointmentItem in appointments) { 
    // HERE I WANT TO WRITE SOME CODE 
    -- WHEN WE ARE INSERTING NEW RECORD OF A SAME ID EX "1abc" IT MUST 
    COMPARE WITH LATEST RECORD "-----2> 
} 

我的要求:如果有人數超過1行有相同的ID,然後我需要攜帶最新通過預約ID記錄像下面的東西

List<JobCustomers> appointments = objectContext.JobCustomers.Where(
        a => a.StartTime >= start && a.EndTime <= end && !string.IsNullOrEmpty(a.AppointmentId).**take(0**)).ToList(); 

在簡單也就是說:使用LINQ,當我們插入裝有相同ID的新紀錄,我們需要一個最後插入的記錄比較

+2

您需要另一個字段,以指示「最新」的記錄是什麼。正如你現在展示的那樣,沒有。一旦你的,它是由/一個簡單的訂單,最大的分組。 – casperOne

+0

您可以使用'oderby DATE descending' – spajce

回答

0

無論LINQ也不SQL不知道以何種順序插入數據,你需要有一個額外的場保存該訂單(可能是一個日期,或autonumeric)。一旦你的,你就可以使用:

YourList.OrderBy(i => i.Id).ThenByDescending(i => i.YourColumnToSaveOrder) 
0
var latestAppts = appointments.GroupBy(x => x.AppointmentId) 
           .Select(g => g.Last()); 
0

如果我正確地讀這篇文章,你要專門搶與同時被帶到這隻會相同ID的最新記錄需要與LINQ的LastOrDefault擴展方法做:

//Variable 'yourNewRecord' is what you're about to enter into the database 
var latestAppt = objectContext.JobCustomers 
           .LastOrDefault(a => a.StartTime >= start && 
                a.EndTime <= end && 
                a.AppointmentID.Equals(yourNewRecord.AppointmentID) 

編輯:有關LastOrDefault更多信息,請看MSDN鏈接here

+0

雖然可能在大多數情況下工作,我似乎記得無序LINQ查詢都不能保證是確定性的。我相信最後/第一次呼叫最好用於先前訂購的集合。上一頁提問/回答http://stackoverflow.com/a/12641528/1161844進一步討論它。 –