我有一個視圖,AdvertView在我的數據庫中,這個視圖是一些表(廣告,客戶,屬性)之間的簡單連接。然後,我有一個簡單的LINQ查詢來獲取所有廣告的客戶:在linq上迭代sql查詢很慢
public IEnumerable<AdvertView> GetAdvertForCustomerID(int customerID)
{
var advertList =
from advert in _dbContext.AdvertViews
where advert.Customer_ID.Equals(customerID)
select advert;
return advertList;
}
話,我想這個到modelItems我的MVC應用程序:
public List<AdvertModelItem> GetAdvertsByCustomer(int customerId)
{
List<AdvertModelItem> lstAdverts = new List<AdvertModelItem>();
List<AdvertView> adViews = _dataHandler.GetAdvertForCustomerID(customerId).ToList();
foreach(AdvertView adView in adViews)
{
lstAdverts.Add(_advertMapper.MapToModelClass(adView));
}
return lstAdverts;
}
我期待有一些性能問題與SQL,但問題似乎與.ToList()函數。我使用的是ANTS性能分析器,它報告函數的總運行時間是1.400ms,其中850個是ToList()。所以我的問題是,爲什麼tolist功能需要這麼長時間?
大衛非常正確。國際海事組織你應該隱式返回IQueryables。返回'List'或'T []'或使用'IQueryable '作爲方法定義的返回類型。這就明確了將會發生什麼。 –
Steven
2010-06-16 11:47:06
我沒有任何牛肉與該方法的返回類型。基本的linq事實是查詢在枚舉時執行。 ToList枚舉它的來源。在知道代碼行按順序執行的情況下,這些知識在linq世界中是至關重要的。 – 2010-06-16 11:55:42
在我之前的評論中輸入錯字。它應該閱讀「你不應該隱式返回IQueryables」。 – Steven 2010-06-16 12:09:12