Как говорит Ladislav Mrnka, вы можете сохранить делегата, чтобы достичь этого. Я делал это до Googling для способа «пересадить» IQueryable из одного 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/en-us/library/bb345303.aspx) вариант для вас? – dasblinkenlight
Возможно, я не уверен, как создать выражение linq, которое вернет ObjectQuery. Пожалуйста, дополните. –
С помощью 'ObjectQuery' вы используете строки запроса следующим образом:' "SELECT VALUE product FROM AdventureWorksEntities.Products AS product". Они остаются модифицируемыми до тех пор, пока они не будут выполнены: вы можете добавить предложение 'where', пропустить/принять, чтобы получить конкретный фрагмент данных и т. Д. – dasblinkenlight