LINQ查询从表中选择所有数据和最后一行

时间:2014-03-03 22:25:39

标签: c# sql linq

以下是示例数据:

id Data Time
-- ---- --------
 1   10 12:08:00
 1   15 12:09:05
 2    8 12:09:15
 3    7 12:10:35
 1   11 12:13:05
 2   15 12:13:35
 1    8 12:17:15
 3   10 12:17:55

我需要两个查询的帮助:

  • 选择输入ID的最新记录。因此对于id = 1:

    ,结果应如下所示
    id Data Time
    -- ---- --------
     1    8 12:17:15
    
  • 仅为一个ID选择所有数据行。所以结果应该是:

    id Data Time
    -- ---- --------
     1   10 12:08:00
     1   15 12:09:05
     1   11 12:13:05
     1    8 12:17:15
    

2 个答案:

答案 0 :(得分:1)

对于第一个查询,您可以对数据进行排序和分组,然后为每个组选择最后一个。

var set1 = items.OrderBy(i => i.Date)
     .GroupBy(i => i.Id)
     .Select(g => g.LastOrDefault())
     .ToArray();

第二个是简单的where语句。

var set2 = items.Where(i => i.Id == 1).ToArray();

答案 1 :(得分:0)

将sql中的“timefield”替换为时间字段的名称(以及带有表名称的“tbl”):

select *
  from tbl
 where timefield = (select max(x.timefield) from tbl x where x.id = tbl.id)