LINQ to SQL GroupBy, Take and OrderBy

本文关键字:Take and OrderBy GroupBy to SQL LINQ | 更新日期: 2023-09-27 18:19:06

我有一个包含记录的表

|   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         |

我要选择具有不同FKID的3条记录,以最晚日期首先属于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()正常工作

LINQ to SQL GroupBy, Take and OrderBy

您需要OrderByDescending:-

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