我有两列,分别为Date
和PersonInCharge
,我想按日期的降序对列表进行排序,然后返回只有人名的列表,不能重复。我使用了Distinct()
来过滤姓氏列表,但我不知道为什么列表顺序总是字母顺序而不是降序排列。
到目前为止,这是我的代码:
IList<string> model.StaffNames = await _context.FarmDiary
.Select(f => new { f.PersonInCharge, f.Date })
.OrderByDescending(x => x.Date)
.Select(x => x.PersonInCharge)
.Distinct()
.ToListAsync();
答案 0 :(得分:1)
Distinct()是关于返回不同的行的,它不承诺任何顺序,但仍按其操作顺序进行排序。要订购,有OrderBy,OrderByDescending。在您的情况下,由于最终列表中没有日期,因此无法按日期排序。
编辑:
void Main()
{
List<FarmDiary> farmDiary = new List<FarmDiary> {
new FarmDiary{Id=1, PersonInCharge="Bob",Date=new DateTime(2018,6,1)},
new FarmDiary{Id=2, PersonInCharge="John",Date=new DateTime(2018,6,2)},
new FarmDiary{Id=3, PersonInCharge="Bob",Date=new DateTime(2018,6,15)},
new FarmDiary{Id=4, PersonInCharge="David",Date=new DateTime(2018,7,1)},
new FarmDiary{Id=5, PersonInCharge="Zachary",Date=new DateTime(2018,6,10)},
};
List<string> staffNames = farmDiary
.GroupBy(d => d.PersonInCharge)
.OrderByDescending(x => x.OrderByDescending(d => d.Date).First().Date)
.Select(x => x.Key)
.ToList();
staffNames.Dump();
}
public class FarmDiary
{
public int Id { get; set; }
public string PersonInCharge { get; set; }
public DateTime Date { get; set; }
}