Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 更改现有IQueryable的ObjectContext<&燃气轮机;_.net_Entity Framework - Fatal编程技术网

.net 更改现有IQueryable的ObjectContext<&燃气轮机;

.net 更改现有IQueryable的ObjectContext<&燃气轮机;,.net,entity-framework,.net,Entity Framework,我有一个方法,可以获取我想要在不同线程上使用一些插件(计数、分页)执行的查询 该方法可以获得返回相同IQueryable的不同查询 有没有办法创建一个EF查询并在以后设置ObjectContext 谢谢。这是不可能的。IQueryable(和ObjectQuery)依赖于创建它的上下文。作为一种解决方法,您可以使用包含查询的自定义静态方法,返回IQueryable并接受上下文作为参数。遵循同样的原则的是与上下文无关的预编译查询。这是不可能的。IQueryable(和ObjectQuery)依赖于

我有一个方法,可以获取我想要在不同线程上使用一些插件(计数、分页)执行的查询

该方法可以获得返回相同
IQueryable
的不同查询

有没有办法创建一个EF查询并在以后设置ObjectContext


谢谢。

这是不可能的。IQueryable(和ObjectQuery)依赖于创建它的上下文。作为一种解决方法,您可以使用包含查询的自定义静态方法,返回IQueryable并接受上下文作为参数。遵循同样的原则的是与上下文无关的预编译查询。

这是不可能的。IQueryable(和ObjectQuery)依赖于创建它的上下文。作为一种解决方法,您可以使用包含查询的自定义静态方法,返回IQueryable并接受上下文作为参数。遵循同样的原则的是与上下文无关的预编译查询。

正如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);
}    
//将您的委托放在某个地方
私人Func_查询工厂;
//创建查询
_queryFactory=db=>db.myenties.Where(x=>x.Something==“ABC”);
//当您要“附加”查询时:
var query=_queryFactory(新的MyDbContext());
var result=query.ToList();
//您还可以有条件地构建查询
如果(某物)
{
var closure=\u queryFactory;//无此项的StackOverflow
_queryFactory=db=>
闭包(db)。其中(x=>x.SomethingElse>123);
}    

和往常一样,在创建闭包时要小心。

正如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);
}    
//将您的委托放在某个地方
私人Func_查询工厂;
//创建查询
_queryFactory=db=>db.myenties.Where(x=>x.Something==“ABC”);
//当您要“附加”查询时:
var query=_queryFactory(新的MyDbContext());
var result=query.ToList();
//您还可以有条件地构建查询
如果(某物)
{
var closure=\u queryFactory;//无此项的StackOverflow
_queryFactory=db=>
闭包(db)。其中(x=>x.SomethingElse>123);
}    

和往常一样,在创建闭包时要小心。

是否为您使用了一个选项?也许,我不知道如何创建一个将返回ObjectQuery的linq表达式。请详细说明。使用
ObjectQuery
可以使用如下查询字符串:
“从AdventureWorksEntities.Products中选择值产品作为产品”
。它们在执行之前是可修改的:您可以附加一个
where
子句,跳过/获取数据的特定部分,等等。但是ObjectQuery的所有构件都需要ObjectContext…是的,这是可能对您有用的部分。每个线程都有自己的
ObjectContext
。您将向每个线程传递一个字符串,该线程将使其成为一个
ObjectQuery
,添加分页,并根据需要运行。是否正在为您使用一个选项?也许,我不确定如何创建一个将返回ObjectQuery的linq表达式。请详细说明。使用
ObjectQuery
可以使用如下查询字符串:
“从AdventureWorksEntities.Products中选择值产品作为产品”
。它们在执行之前是可修改的:您可以附加一个
where
子句,跳过/获取数据的特定部分,等等。但是ObjectQuery的所有构件都需要ObjectContext…是的,这是可能对您有用的部分。每个线程都有自己的
ObjectContext
。您将向每个线程传递一个字符串,该线程将使其成为一个
ObjectQuery
,添加分页,并根据需要运行。但是我的方法可以得到不同的查询,这些查询返回相同的iquery以供处理。当我执行查询时,我不知道它在查询什么。要么你的评论没有意义,要么你没有正确描述问题。该方法将只包含基本查询,因为它将返回IQueryable,所以您可以在使用它时添加其他条件或分页。我刚才看到了其他问题,因此上下文更容易理解。您仍然可以使用我提到的方法,通过从主线程到工作线程的不同查询将委托传递给那些不同的静态方法。这些线程将调用接收到的委托并将其上下文作为参数传递。但是我的方法可以得到不同的查询,这些查询返回相同的IQueryable来处理。当我执行查询时,我不知道它在查询什么。要么你的评论没有意义,要么你没有正确描述问题。该方法将只包含基本查询,因为它将返回IQueryable,所以您可以在使用它时添加其他条件或分页。我刚才看到了其他问题,因此上下文更容易理解。您仍然可以使用我提到的方法,通过从主线程到工作线程的不同查询将委托传递给那些不同的静态方法。这些线程将调用接收到的委托并将其上下文作为参数传递。