为什么LINQ Distinct()不保留订单列表?

时间:2018-08-02 09:13:17

标签: c# entity-framework linq

我有两列,分别为DatePersonInCharge,我想按日期的降序对列表进行排序,然后返回只有人名的列表,不能重复。我使用了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();  

1 个答案:

答案 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; }
}