2011-10-12 40 views
0

我已經安裝了Linq To SQL Profiler並注意到,我有雙重查詢執行(或者我錯了)。所以:LINQ MVC 3和探查器中的雙查詢

int categoriesCount = _dataManager.PeopleTalesCategories.GetPeopleTalesCategoriesCount(); 

在這裏,我第一次查詢:

​​

然後:

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> 
} 

我得到第三個查詢,就像第二個。

那麼,有沒有人知道我爲什麼在Linq To Sql Profiler中有3個查詢?這是正常的嗎?

Thx很多。

鏈接探查:http://l2sprof.com/

回答

1

我猜GetAllCategories返回一個被列舉了兩次,雖然我不知道爲什麼會發生在這裏爲IQueryable。無論如何,如果在GetAllCategories中將其返回或將其分配給viewbag時使用.ToList()可能會有所幫助:

ViewBag.Categories = categories.ToList(); 
+0

GetAllCategories返回IEnumerable。 ToList()沒有幫助=( – FSou1

+0

是的,它有幫助。但ToList() - > ToList (); :) Thx! – FSou1