LINQ MVC 3和分析器中的双查询



我已经安装了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();

最新更新