我有一個方法可以獲取我想要在不同線程上使用一些插件(計數,分頁)執行的查詢。更改現有IQueryable的ObjectContext <>
該方法可以得到不同的查詢返回相同的IQueryable<someEntity>
。
有沒有辦法創建一個EF查詢並設置ObjectContext它?
感謝。
我有一個方法可以獲取我想要在不同線程上使用一些插件(計數,分頁)執行的查詢。更改現有IQueryable的ObjectContext <>
該方法可以得到不同的查詢返回相同的IQueryable<someEntity>
。
有沒有辦法創建一個EF查詢並設置ObjectContext它?
感謝。
這是不可能的。 IQueryable(和ObjectQuery)依賴於創建它的上下文。作爲解決方法,您可以使用包含查詢的自定義靜態方法,返回IQueryable並接受上下文作爲參數。預編譯的查詢與上下文無關,後面跟着相同的原理。
但我的方法可以得到不同的查詢,返回相同的IQueryable
您的評論沒有意義,或者您沒有正確描述問題。該方法將只包含基本查詢,並且由於它將返回IQueryable,因此您可以在使用它時添加其他條件或分頁。 – 2012-01-08 14:36:25
對不起,更新。希望它更清晰。 – 2012-01-08 14:43:04
正如Ladislav Mrnka所說,你可以存儲一個代表來實現這一點。在谷歌搜索之前,我正在做這個工作,以便將IQueryable從一個DbContext「移植」到另一個DbContext。我很高興看到我的方法驗證:)
這裏有一個具體的例子:
// keep your delegate somewhere
private Func<MyDbContext, IQueryable<MyEntity>> _queryFactory;
// create the query
_queryFactory = db => db.MyEntities.Where(x => x.Something == "ABC");
// when you want to "attach" the query:
var query = _queryFactory(new MyDbContext());
var result = query.ToList();
// you can also conditionally build on the query
if(something)
{
var closure = _queryFactory; // StackOverflow without this
_queryFactory = db =>
closure(db).Where(x => x.SomethingElse > 123);
}
和往常一樣,在創建關閉時要小心。
正在爲您使用['ObjectQuery'](http://msdn.microsoft.com/zh-cn/library/bb345303.aspx)「選項嗎? – dasblinkenlight 2012-01-08 13:36:11
也許,我不知道如何創建一個返回ObjectQuery的linq表達式。請詳細說明。 – 2012-01-08 13:42:18
通過'ObjectQuery',您可以使用如下查詢字符串:''SELECT VALUE product FROM AdventureWorksEntities.Products AS product「'。它們在被執行之前一直保持可修改狀態:您可以附加一個'where'子句,跳過/獲取特定的數據片段等等。 – dasblinkenlight 2012-01-08 13:56:03