繁体   English   中英

在C#DBML中获取具有最新/更大日期的每种类型的记录

[英]Get record for each type with latest / bigger dates in C# DBML

我有一个数据库表,其中包含一些数据,如下所示:

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查询来选择每行的最新记录。 日期可以是任何日期,我只需要基于“ 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

您需要做的是,在线分组,然后按降序排列后分组中的第一项。

db.GetTable<lnk_sts>()
  .GroupBy(x=>x.LINE)
  .Select(x=>x.OrderByDescending(o=>o.DATE).FirstOrDefault())       
  .ToList();

首先按行分组,然后按日期排序并获取最后一项。

var result = db.GetTable<lnk_sts>().GroupBy(x=> x.LINE).Select(x => x.OrderBy(y => y.Date).Last())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM