必须有一个单行来做这个,我找不到它.
鉴于此查询:
from x in new XPQuery<XPContent>(s)
select new { x.Category, x.ContentType, x.Name, x.ContentID, x.Date }
Run Code Online (Sandbox Code Playgroud)
我需要为每个不同的ContentID选择具有最大日期的记录.使用LINQ可以巧妙地完成这项工作吗?现在我这样做:
var q = (from x in new XPQuery<XPContent>(s)
select new { x.Category, x.ContentType, x.Name, x.ContentID, x.Date }).ToList();
var r = q.ToLookup(item => item.ContentID);
foreach (var rItem in r) {
var s = rItem.OrderByDescending(a => a.Date).First();
/* do stuff with s */
}
Run Code Online (Sandbox Code Playgroud)
......但ToLookup感觉有点笨重.或者我有最好的(最简单的)解决方案?
另外,我知道我不应该使用ToList,但请暂时忽略它.
提前致谢!
我想你想要:
var q = from x in new XPQuery<XPContent>(s)
group x by x.ContentID into g
let latest = g.OrderByDescending(a => a.Date).First()
select new
{
latest.Category, latest.ContentType,
latest.Name, latest.ContentID, latest.Date
};
Run Code Online (Sandbox Code Playgroud)
(请注意,有更多高效的方法可以从组中查找'maximum'元素,而不是先对其进行排序,例如使用MaxBy运算符.)
查询非常简单; 它只是按项目对项目进行ContentId分组,然后从每个组中选择一个匿名类型的实例,该实例是从该组的最新项目生成的.
| 归档时间: |
|
| 查看次数: |
4366 次 |
| 最近记录: |