【发布时间】:2015-09-15 23:13:58
【问题描述】:
我在我的数据库上设置了一个视图来跟踪活动、按日期分组并按用户计数。日期是DateTime 列,因此我必须将其转换为仅使用日期部分。在数据库中,视图中的数据是正确的,但是当视图显示在MVC5 中时,它会多次显示某些数据。
为视图选择查询:
SELECT TOP(100)PERCENT DATEADD(dd, DATEDIFF(dd, 0, DateCompleted),0) AS WorkDate, UserName, Count(UserName) AS Total
FROM dbo.Queue
GROUP BY DATEADD(dd, DATEDIFF(dd, 0, DateCompleted),0), UserName, Status
HAVING (Status = N'Completed')
ORDER BY WorkDate
在 MVC 控制器中:
public ActionResult Activity()
{
IQueryable<Activity> activity = db.Activity.OrderBy(a => a.WorkDate).ThenBy(a => a.UserName);
return View(activity);
}
在视图中:
@model IEnumerable<Models.Activity>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.WorkDate)
</th>
<th>
@Html.DisplayNameFor(model => model.UserName)
</th>
<th>
@Html.DisplayNameFor(model => model.Total)
</th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.WorkDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.UserName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Total)
</td>
</tr>
}
</table>
奇怪的是,数据库的结果集中有 22 行,而视图也显示 22 行,但它显示相同的行两到三次,而根本没有显示某些行。任何帮助了解这一切的人将不胜感激。
【问题讨论】:
-
你是否 100% 确定这 22 行显示的数据是重复的?
-
您可以将您的日期时间列转换为日期。将是更简单的代码。我不太明白问题出在哪里或是什么。是sql视图还是mvc视图的问题?
-
@SeanLange:尝试强制转换为日期,但出现了无法处理日期方法的错误。 SQL 视图中的数据很好,所以我认为问题一定出在 MVC 端。
-
@DavidG:是的,SQL 视图在每个日期每个用户都有一行,正如您所期望的那样。 MVC 视图以看似随机的顺序在同一日期多次显示同一用户。数据按日期排序,因此日期应该连续运行,但它们会来回切换。
标签: sql-server entity-framework sql-server-2008 group-by asp.net-mvc-5