LINQ to SQL GroupBy、Take 和 OrderBy

LINQ to SQL GroupBy, Take and OrderBy

我有一个 table 有记录

|   ID      |   FKID    |   Date        |   Username        |
--------------------------------------------------------------
|   A       |   a1      |   01/01/01    |       Joe         |
|   B       |   a1      |   02/01/01    |       Joe         |
|   C       |   b1      |   03/01/01    |       Joe         |
|   D       |   b1      |   04/01/01    |       Joe         |
|   E       |   c2      |   05/01/01    |       Joe         |
|   F       |   c2      |   06/01/01    |       Joe         |

我想要 select 3 条不同 FKID 的记录,最新日期排在第一个属于 Joe

|   F       |   c2      |   06/01/01    |       Joe         |
|   D       |   b1      |   04/01/01    |       Joe         |
|   B       |   a1      |   02/01/01    |       Joe         |

我可以做到这一点:

Table.Where(a => a.Username.Equals("Joe"))
     .GroupBy(a => a.FKID)
     .Select(g => g.FirstOrDefault())
     .ToList<Record>();

但无法使 Take()OrderByDecending() 正常工作。

你需要 OrderByDescending :-

Table.Where(a => a.Username.Equals("Joe"))
     .GroupBy(a => a.FKID)
     .Select(g => g.OrderByDescending(x => x.Date).FirstOrDefault())
     .Take(3)
     .ToList<Record>();