我有一个简单的Linq to Enities表来查询并使用日期字段
获取最新记录所以我尝试了这段代码:
IQueryable<Alert> alerts = GetAlerts();
IQueryable<Alert> latestAlerts =
from a in alerts
group a by a.UpdateDateTime into g
select g.OrderBy(a => a.Identifier).First();
错误: NotSupportedException:不支持方法'GroupBy'。
还有其他办法吗? 非常感谢!
答案 0 :(得分:11)
我有类似的需求。我希望得到键入的记录,而不是一个新的匿名对象。要做到这一点。第一个()可以帮助。
var query = from alert in m_alerts
group alert by alert.Identifier into a
select a.OrderByDescending(g => g.UpdateDateTime).First();
使用OrderByDescending对它们进行排序,并使用First()进行排序。您已按标识符对它们进行分组,因此您应该只获取每个标识符的最新记录。
答案 1 :(得分:4)
如果没有理由对其进行分组,您可以稍微切换一下查询:
IQueryable<Alert> alerts = GetAlerts();
IQueryable latestAlerts = alerts.OrderByDescending(a => a.UpdateDateTime);
答案 2 :(得分:0)
应该是
IQueryable<Alert> latestAlerts =
(from a in alerts
group a by a.UpdateDateTime into g
order by g.Key
select g).First();
Linq-to-Entities 肯定支持 GroupBy
答案 3 :(得分:0)
所以答案是:
var query =
from alert in m_alerts
group alert by alert.Identifier
into g
select new
{
GroupIdentifier = g.Key,
UpdateDateTime = g.Max(p => p.UpdateDateTime)
};
这将返回最近的记录。