在 C# DBML 中获取具有最新/更大日期的每种类型的记录
Get record for each type with latest / bigger dates in C# DBML
我有一个数据库 table,其中有一些数据如下:
LINE | QTY | USERID | DATE
-----------------------------------------
1 | 5 | qb1 | 2015-03-02 11:23:25
2 | 1 | qb2 | 2015-03-02 18:24:03
3 | 3 | ch1 | 2015-03-03 05:38:49
1 | 2 | qb1 | 2015-03-03 08:47:02
2 | 4 | qb2 | 2015-03-03 14:01:31
3 | 2 | ch1 | 2015-03-03 21:11:53
1 | 4 | qb1 | 2015-03-04 09:34:04
2 | 5 | qb2 | 2015-03-04 15:29:27
3 | 1 | ch1 | 2015-03-04 19:28:33
如您所见,我在数据库中只有 3 个唯一的 LINE
值。我需要一个 LINQ 查询 select 每行的最新记录。日期可以是任何日期,我只需要基于 "DATE" 字段的行的最新状态。
目前我正在做的非常粗略是这样的:
var line1 = db.GetTable<lnk_sts>().Where(x=> x.LINE== 1).OrderByDescending(x => x.DATE).FirstOrDefault();
其他 2 相同。我需要的是 lnk_sts
的列表,其中只有日期较大的那些,在这种情况下:
LINE | QTY | USERID | DATE
---------------------------------------
1 | 4 | qb1 | 2015-03-04 09:34:04
2 | 5 | qb2 | 2015-03-04 15:29:27
3 | 1 | ch1 | 2015-03-04 19:28:33
先按行分组,然后按日期排序,取最后一项。
var result = db.GetTable<lnk_sts>().GroupBy(x=> x.LINE).Select(x => x.OrderBy(y => y.Date).Last())
你需要做的是,在线分组,然后在降序排序后取组中的第一个项目。
db.GetTable<lnk_sts>()
.GroupBy(x=>x.LINE)
.Select(x=>x.OrderByDescending(o=>o.DATE).FirstOrDefault())
.ToList();
我有一个数据库 table,其中有一些数据如下:
LINE | QTY | USERID | DATE
-----------------------------------------
1 | 5 | qb1 | 2015-03-02 11:23:25
2 | 1 | qb2 | 2015-03-02 18:24:03
3 | 3 | ch1 | 2015-03-03 05:38:49
1 | 2 | qb1 | 2015-03-03 08:47:02
2 | 4 | qb2 | 2015-03-03 14:01:31
3 | 2 | ch1 | 2015-03-03 21:11:53
1 | 4 | qb1 | 2015-03-04 09:34:04
2 | 5 | qb2 | 2015-03-04 15:29:27
3 | 1 | ch1 | 2015-03-04 19:28:33
如您所见,我在数据库中只有 3 个唯一的 LINE
值。我需要一个 LINQ 查询 select 每行的最新记录。日期可以是任何日期,我只需要基于 "DATE" 字段的行的最新状态。
目前我正在做的非常粗略是这样的:
var line1 = db.GetTable<lnk_sts>().Where(x=> x.LINE== 1).OrderByDescending(x => x.DATE).FirstOrDefault();
其他 2 相同。我需要的是 lnk_sts
的列表,其中只有日期较大的那些,在这种情况下:
LINE | QTY | USERID | DATE
---------------------------------------
1 | 4 | qb1 | 2015-03-04 09:34:04
2 | 5 | qb2 | 2015-03-04 15:29:27
3 | 1 | ch1 | 2015-03-04 19:28:33
先按行分组,然后按日期排序,取最后一项。
var result = db.GetTable<lnk_sts>().GroupBy(x=> x.LINE).Select(x => x.OrderBy(y => y.Date).Last())
你需要做的是,在线分组,然后在降序排序后取组中的第一个项目。
db.GetTable<lnk_sts>()
.GroupBy(x=>x.LINE)
.Select(x=>x.OrderByDescending(o=>o.DATE).FirstOrDefault())
.ToList();