我有一个显示应用程序错误更新列表的仪表板。有些错误发生了不止一次,所以我按错误类型对它们进行了分组,并对它们进行计数以查看此错误发生了多少次。我想知道错误发生的第一个日期,这很简单,但也想知道它发生的最后日期,以查看此错误持续了多长时间。
下面我显示了我的当前输出和预期输出
当前输出
预期输出
下面我展示了我的代码。为了显示最后日期和第一个日期,我需要进行哪些更改?我试过使用 LastOrDefault()
但这实际上不起作用,因为当 LINQ 查询转换为 SQL 语句时,没有 BOTTOM 1
命令。
Controller
public ActionResult Errors(string sortOrder, int? page)
{
ViewBag.CurrentSort = sortOrder;
ViewBag.DateSortParm = sortOrder == "Date" ? "date_desc" : "Date";
var queryString = RouteData.Values["id"];
var applications = db.ElmahErrors.Where(s => s.Application.Replace("/", "").Replace(".", "") == queryString)
.GroupBy(s => s.Type)
.Select(grp => new ErrorCountModel
{
ErrorCount = grp.Count(),
ElmahError = grp.FirstOrDefault()
});
switch (sortOrder)
{
default:
applications = applications.OrderBy(s => s.ElmahError.TimeUtc);
break;
}
int pageSize = Int32.Parse(System.Configuration.ConfigurationManager.AppSettings["DefaultPageSize"]);
int pageNumber = (page ?? 1);
return View(applications.ToPagedList(pageNumber, pageSize));
}
ErrorCount 模型
public class ErrorCountModel
{
public int ErrorCount { get; set; }
public ElmahError ElmahError { get; set; }
}
如有任何帮助,我们将不胜感激。
提前致谢。
最佳答案
旁注:以下不能保证给你最新的错误,因为你还没有告诉它排序
ElmahError = grp.FirstOrDefault()
应该是这样的:
ElmahError = grp.OrderBy(s => s.ElmahError.TimeUtc).FirstOrDefault();
我原以为 .LastOrDefault() 会起作用,但如果它真的不起作用,您可以这样做:
LastElmahError = grp.OrderByDescending(s => s.ElmahError.TimeUtc).FirstOrDefault();
本质上,您颠倒了第一个错误的顺序。
此外,将此添加到您的 ErrorCountModel
模型类:
public ElmahError LastElmahError { get; set; }
关于c# - 显示 GroupBy ASP.NET MVC 的第一个实例和最后一个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32134887/