c# - 按用户订购,然后选择最大日期

标签 c# oracle linq linq-to-sql

我有这个 LINQ 查询:

ArrayList arr = new ArrayList();
var data = conn.SCOT_DADOS.OrderByDescending(x => x.DATE)
                          .GroupBy(r => r.USER)
                          .ToList();
foreach (var item in data)
{
    var itemdata = item.Where(r => r.DATE == item.Max(s => s.DATE));

    var name = svc.GetUserName(itemdata.Select(r => r.USER).First().ToString());
    var value = itemdata.Select(r => r.VALUE).First();
    var date = itemdata.Select(r => r.DATE).First().ToString("dd/MM/yyyy HH:mm:ss");

    arr.Add( new{ NAME = name, DATE = date, VALUE = value} );
}

此代码将为我提供每个USERDATE之前的最新结果。

但是 LINQ 查询正在选择用户的所有数据,然后我在 foreach 循环中获取最新的数据。

有没有办法只获取 LINQ 查询中的最后一个数据,这样我就不必每次都获取所有用户数据?


我已经尝试过这个:

var data = conn.SCOT_DADOS.OrderByDescending(x => x.DATE)
                          .GroupBy(r => r.USER)
                          .First()
                          .ToList();

然后将 item 视为对象,而不是对其运行选择。

它为我提供了单个用户的所有数据,这不是我想要的。

可以做什么?


编辑1:

如果我尝试交换 OrderByDescendingGroupBy,我会收到此错误:

Error CS1061 'IGrouping' does not contain a definition for 'DATE' and no extension method 'DATE' accepting a first argument of type 'IGrouping' could be found (are you missing a using directive or an assembly reference?)


编辑2:

这是一些示例数据(列名称不同,因为我为问题翻译了它们):

enter image description here

根据提供的数据,我得到结果:

enter image description here

最佳答案

如果(USER,DATE)对的组合是唯一的(查看示例数据时似乎就是这种情况),则可以将要求缩减为

return each record if there is no other record with the same USER and later DATE

可以转换为以下 LINQ 查询:

var result = conn.SCOT_DADOS
    .Where(r => !conn.SCOT_DADOS.Any(r2 => r2.USER == r.USER && r2.Date > r.Date))
    // end of Db Query 
    .AsEnumerable()
    .Select(r => new
    {
        Name = svc.GetUserName(r.User),
        Value = r.Value,
        Date = r.Date.ToString("dd/MM/yyyy HH:mm:ss")
    }).ToList(); 

关于c# - 按用户订购,然后选择最大日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40019729/

相关文章:

oracle - 如何使用 liquibase 在线创建索引?

c# - 访问对象属性而不转换为类型

c# - 数据库连接(最佳实践)

C#6.0 字符串插值本地化

c# - 如何确定页面上是否需要 Asp.net Scriptmanager

c# - 如何并排显示 4 个三角形图案

oracle - AQ$_PLSQL_NTFNnnnn 调度程序作业的用途是什么?

java - 使用辅助表的复合主键打开 JPA - @TableGenerator

c# - 在 LINQ 表达式中使用 OR

c# - WinRT FlipView.SelectedIndex 绑定(bind)不响应 ViewModel 中的更改