我已经安装了Linq To Sql Profiler并注意到,我有双重查询执行(或者我错了)。所以:
int categoriesCount = _dataManager.PeopleTalesCategories.GetPeopleTalesCategoriesCount();
这里我有第一个查询:
SELECT COUNT(*) AS [value]
FROM [dbo].[PeopleTalesCategories] AS [t0]
:
IEnumerable<PeopleTalesCategory> categories = _dataManager.PeopleTalesCategories.GetAllCategories((int)ViewData["CurrentPage"] * CategoriesOnPage, CategoriesOnPage);
ViewBag.Categories = categories;
return View();
这里我有第二个查询:
SELECT ...
FROM (SELECT ROW_NUMBER() OVER (ORDER BY [t0].[PositionInMenu], [t0].[NameAn]) AS [ROW_NUMBER],
...
FROM [dbo].[PeopleTalesCategories] AS [t0]) AS [t1]
WHERE [t1].[ROW_NUMBER] BETWEEN 0 /* @p0 */ + 1 AND 0 /* @p0 */ + 15 /* @p1 */
ORDER BY [t1].[ROW_NUMBER]
和最有趣的是,当我开始在HTML标记中显示我的分类时:
@foreach (var c in ViewBag.Categories)
{
<h3><a href="/narodnie-skazki/@c.RouteNameAn">@c.NameAn</a> <span>(@c.tCountInCategory)</span></h3>
<p>@c.Description</p>
}
我得到第三个查询,像第二个。
所以,有人知道为什么我有3个查询在Linq到Sql分析器?这正常吗?
Thx很多。
指向分析器的链接:http://l2sprof.com/
我猜GetAllCategories返回一个IQueryable,它被枚举两次,虽然我不确定为什么会发生在这里。无论如何,如果在GetAllCategories中返回.ToList()或将其分配给viewbag时使用.ToList()可能会有所帮助:
ViewBag.Categories = categories.ToList();