2012-12-30 67 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进一步讨论它。 –