根据对象属性从列表中查找最新记录?

时间:2018-10-18 08:32:19

标签: c# linq

我有一个Test类的列表

public class Test
{
        public int Id { get; set; }
        public string Name { get; set; }
        public DateTime CreatedDate { get; set; }
        public DateTime? ModifiedDate { get; set; }
}

列表中包含以下数据

List<Test> lstTest = new List<Test>();
lstTest.Add(new Test() { Id = 1, Name = "Test 1", CreatedDate = Convert.ToDateTime("05/05/2005"), ModifiedDate = Convert.ToDateTime("09/05/2005") });
lstTest.Add(new Test() { Id = 2, Name = "Test 2", CreatedDate = Convert.ToDateTime("06/05/2005"), ModifiedDate = Convert.ToDateTime("07/05/2005") });
lstTest.Add(new Test() { Id = 3, Name = "Test 3", CreatedDate = Convert.ToDateTime("08/05/2005"), ModifiedDate = null });

现在我想找到一条最近更新的记录,例如Test列表中的3条记录,第一个记录是最新更新的,因为它的修改日期是最新的,我怎么找到它?

现在让我们改变情景

lstTest.Add(new Test() { Id = 4, Name = "Test 4", CreatedDate = Convert.ToDateTime("10/05/2005"), ModifiedDate = null });

因此第4条记录是基于创建日期的最新记录,因此我们如何查找第4条记录 谢谢

4 个答案:

答案 0 :(得分:3)

好吧,您可以按日期对列表进行排序,然后使用LINQ获取记录:

var latest = lstTest.OrderByDescending(x => x.ModifiedDate ?? x.CreatedDate).First();

答案 1 :(得分:0)

您可以使用LINQ OrderBy按日期排序(最旧的),然后使用LastOrDefault获取最后一个条目(如果集合不包含任何条目,则为null)。

使用空合并运算符??处理ModifiedDate的任何空值,并在这种情况下使用CreationDate进行比较。

Test lastEntry = lstTest
    .OrderBy(t => t.ModifiedDate ??  t.CreatedDate)
    .LastOrDefault();

C# Fiddle

答案 2 :(得分:0)

尝试一下……然后您可以找到最新记录。

var latestRecord = lstTest.OrderByDescending(x => x.ModifiedDate ?? x.CreatedDate).FirstOrDefault();

答案 3 :(得分:0)

您可以尝试以下代码:

var Latestrecord = lstTest.OrderByDescending(t => t.ModifiedDate)                   .FirstOrDefault();