首页 / C# / c# – 实体框架:按顺序排序然后分组
c# – 实体框架:按顺序排序然后分组
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 实体框架:按顺序排序然后分组,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1866字,纯文字阅读大概需要3分钟。
内容图文
![c# – 实体框架:按顺序排序然后分组](/upload/InfoBanner/zyjiaocheng/822/5d0a070166494ab985f8199a1948e460.jpg)
我正在使用实体框架代码优先,并具有以下POCO代表我的数据库中的表.
public class LogEntry
{
public int Id {get; set;}
public DateTimeOffset TimeStamp {get;set;}
public string Message {get; set;}
public string CorrelationId {get; set;}
}
CorrelationId不是唯一的.表中通常会有多个具有相同CorrelationId的记录,该字段用于跟踪哪些日志条目对应于哪个请求.
然后我有另一个对象,让我通过CorrelationId对这些日志条目进行分组.此对象不会映射回DB中的任何表.
public class AuditTrail
{
public string CorrelationId {get; set;}
public DateTimeOffset FirstEvent {get; set;}
public List<LogEntry> LogEntries {get; set;}
}
我希望能够填充AuditTrail对象列表.问题在于我希望对它们进行排序,以便最新的Audit Trail记录位于顶部.我也正在进行分页,所以我需要在分组之前发生命令,以便返回正确的记录.即我不想得到结果,然后对它们进行排序.排序需要在返回数据之前进行.
我已经尝试了一些查询并最终得到了这个:
var audits = from a in context.LogEntries
group a by a.CorrelationId into grp
select grp.OrderByDescending(g => g.TimeStamp);
这给了我一个IQueryable< IOrderedEnumerable< LogEntry>>回过头来我遍历构建我的AuditTrail对象.问题是记录只在组内排序.例如,我将返回昨天的AuditTrail,然后是一周之前的一个,然后是今天的一个,但在LogEntries列表中,所有这些条目都已排序.我想要的是AuditTrails基于TimeStamp列以降序返回,以便在UI的表顶部显示新的AuditTrails.
我也试过这个查询(按照Entity Framework skip take by group by):
var audits = context.LogEntries.GroupBy(i => i.CorrelationId)
.Select(g => g.FirstOrDefault())
.OrderBy(i => i.TimeStamp)
.ToList();
这只返回每个相关ID的第一个LogEntry,当我希望它们全部按相关ID分组时.
解决方法:
我认为你要找的是这样的:
var audits = (from a in context.LogEntries
group a by a.CorrelationId into grp
let logentries = grp.OrderByDescending( g => g.TimeStamp)
select new AuditTrail
{
CorrelationId = grp.Key,
FirstEvent = logentries.First().TimeStamp,
LogEntries = logentries.ToList()
}).OrderByDescending( at => at.FirstEvent);
内容总结
以上是互联网集市为您收集整理的c# – 实体框架:按顺序排序然后分组全部内容,希望文章能够帮你解决c# – 实体框架:按顺序排序然后分组所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。