0

我们的表结构如下所示:

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 的新记录时,我们需要与最后插入的记录进行比较

4

3 回答 3

0
var latestAppts = appointments.GroupBy(x => x.AppointmentId)
                              .Select(g => g.Last());
于 2012-12-30T15:17:54.320 回答
0

LINQ 和 SQL 都不知道您插入数据的顺序,您需要有一个额外的字段来保存此顺序(可以是日期或自动数字)。一旦你有了它,你将能够使用:

YourList.OrderBy(i => i.Id).ThenByDescending(i => i.YourColumnToSaveOrder)
于 2012-12-30T02:44:33.330 回答
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 链接。

于 2012-12-31T21:41:47.960 回答