我有一個返回值IQueryable
使用LINQ當在LINQ中執行時,表達式是否枚舉參數?
return eventFacade.GetNewBuildingEvents()
.Where(EventPredicates.IsBuildingOwner(
memberFacade.GetFriendsAndColleagues(m).Select(y => y.Id))
)
GetFriendsAndColleagues(m).Select(y => y.Id)
返回一個IEnumerable
public static Expression<Func<Event, bool>> IsBuildingOwner(IEnumerable<int> friendids)
{
return
x =>
x.Building.BuildingMembers.Where(k => k.Type == MemberType.Owner)
.Any(p => friendids.Contains(p.Member.Id));
}
我仍然在學習LINQ和C#在一般的方法。我知道IQueryable
和IEnumerable
都推遲執行,並且我知道在數據庫中使用IQueryable
進行過濾,而IEnumerable
發生在內存中。
我也知道,在一個迭代集合的情況下,最好枚舉集合,以便每次迭代都不會調用數據庫。
所以在執行我的最終查詢請問IEnumerable
傳遞到我的表達得到列舉一次,然後使用由GetNewBuildingEvents()
或
返回的每個項目比較它使在每個數據庫中調用比較得到清單?
「GetNewBuildingEvents」的實現和返回類型是什麼?什麼是IQueryable提供程序?無論如何,我相信或者它是LINQ對實體或IQueryable將拋出一個異常。 – gdoron
我在查詢中使用.AsEnumerable(),稍後在方法中將其轉換爲另一個對象。如上所述的查詢編譯並運行良好 –
你是專門詢問Linq到SQL/DB的權利嗎?由於AFAIK,您可以同時使用IQueryable和IEnumerable,以便LINQ to Objects以及Linq to DB。最終實際運行的是LINQ提供者。 – Vivek