[英]When does Take get called in a linq query?
所以我有這樣的事情:
public IQueryable<Teachers> GetTeachers()
{
var query = from a in this.Context.Techers
where a.active == true
select a
return query;
}
然后我稱之為:
List<Teachers> = this.repo.GetTeachers().Take(5000).ToList();
讓我們稍后在程序中的某個地方說我將這些記錄標記為活動為假;
現在如果我再次運行這個程序,它應該返回零記錄嗎? 或者它選擇“下一個5000可用”活動記錄?
您正在使用LINQ to SQL(或LINQ to Entites),因此您的查詢將在SQL查詢中進行轉換,這看起來與此類似:
SELECT TOP 5000 *
FROM techers
WHERE active = true
將返回的內容取決於db中的表的內容。
如果您將前5000條記錄標記為非活動狀態,則再次運行它將返回下一個5000個活動元素(如果表中仍有活動元素)。
如果將查詢具體化為列表,則無法再對服務器執行該查詢。 List對執行查詢一無所知。 只有保留IQueryable,才能重新執行查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.