我的問題是如何/何時有意義重載(如果可能?)Where()擴展 IQueryable的方法,當你正在做自己的IQueryable實現?重載.Where擴展與IQueryable <T>實現
例如在Entity Framework中,我的理解是,針對ObjectSet的Where()調用將更改傳遞到數據庫的實際SQL。或者,如果您先投射到IEnumerable(),則首先使用LINQ-To-Objects而不是LINQ-To-Entities進行過濾。
例如:
new MyDBEntities().MyDbTable.Where(x => x.SomeProperty == "SomeValue");
// this is linq-to-entities and changes the database-level SQL
對戰:
new MyDBEntities().MyDbTable.AsEnumerable().Where(x => x.SomeProperty == "SomeValue");
// this is linq-to-objects and filters the IEnumerable
你怎麼處理這個實現自己的IQueryable和IQueryable的已經已經預先定義的擴展方法時,如其中()?具體而言,我想讓我自己的非常簡單的ORM使用本機SQL和SqlDataReader,並且希望有一個.Where()方法在將它傳遞到數據庫之前更改本機SQL。
我應該甚至使用IQueryable還是完全創建自己的類?我希望能夠使用lambda語法,並根據用於過濾的lambda函數改變我的SQL命令。
我不確定這是否有幫助,但您可能想至少閱讀一下relinq:http://relinq.codeplex.com/他們可能已經完成了一些您正在尋找的東西(它是開放的資源)。或者也許根本沒有重疊。 –