【发布时间】:2016-10-13 22:24:01
【问题描述】:
我有这个 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} );
}
此代码将通过DATE 为我提供每个USER 的最新结果。
但是 LINQ 查询是从用户那里选择所有数据,然后我在 foreach 循环中得到了最新的数据。
有没有办法只获取LINQ查询中的最后一条数据,这样就不用每次都取所有用户数据了?
我试过这个:
var data = conn.SCOT_DADOS.OrderByDescending(x => x.DATE)
.GroupBy(r => r.USER)
.First()
.ToList();
然后将item 视为一个对象,而不是对其运行选择。
它为我提供了单个用户的所有数据,这不是我想要的。
可以做什么?
编辑 1:
如果我尝试交换 OrderByDescending 和 GroupBy,则会收到此错误:
错误 CS1061 'IGrouping' 不包含 'DATE' 的定义并且没有扩展方法 'DATE' 接受第一个 可以找到“IGrouping”类型的参数(是 您缺少 using 指令或程序集引用?)
编辑 2:
这是一些示例数据(列名不一样,因为我为问题翻译了它们):
根据提供的数据,我会得到结果:
【问题讨论】:
-
尝试交换顺序和组。
-
我收到一个错误。我会补充这个问题。
-
@Phiter Fernandes - 请解释一下您的意思。添加示例输入和结果数据会有所帮助
-
User 是一个类还是仅仅是一个属性。如果您想订购已订购的列表,请使用:myList.OrderBy(o => o.MyProperty).ThenBy(o => o.OtherProperty)
标签: c# oracle linq linq-to-sql