0

我已閱讀關於IEnumerable和IQueryable,我已經讀過IQueryable更適合於linq,因爲當你使用where子句時,它會創建它所需的確切查詢,但是使用IEnumerable它會從數據庫中檢索所有行,然後在內存上進行過濾。IEnumerable和IQueryable,當我使用var關鍵字時,它使用哪一個?

確切的問題在這裏: 這是一樣的嗎?

如何更好的方式?

public ActionResult Index() 
     { 
      var positions = unitOfWork.PositionRepository.Find(p => p.PositionID != null); 

      return View(positions.ToList()); 
     } 

public ActionResult Index() 
     { 

      IQueryable<positions> positions = unitOfWork.PositionRepository.Find(p => p.PositionID != null); 

      return View(positions.ToList()); 
     } 

回答

1

var表示該類型是由編譯器自動推斷的。基本上,如果數據源是IQueryable(例如實體框架或Linq to SQL數據上下文,RIA服務等),那麼您的變量也將是IQueryable。如果數據源是IEnumerable(例如,內存中的對象集合),則您的變量也將是IEnumerable

由於IQueryable<T>IEnumerable<T>繼承,任何IQueryable可以被視爲一個IEnumerable,通過使用AsEnumerable擴展方法。在調用AsEnumerable之後的所有內容都將在本地執行,而不是轉換爲數據源語言(SQL,HTTP REST ...)。

相關問題