Реализация поставщика для этого не так уж трудно:Как получить текст запроса экземпляра IQueryable <T>, на который вызывается этот оператор?
var query = from foo in someContext.Foos
where foo.Bar == "bar" && foo.Gaz > 4
select foo;
Но если цепь вместе два оператора так:
var chained1 = (from foo in someContext.Foos
where foo.Bar == "bar"
select foo)
.Where(f => f.Gaz > 4);
или если я сделал это:
var chained2 = chained1.Take(10);
Как я бы это реализовал?
При оценке текущего вызова метода или оператора в VisitMethodCall
я посещаю экземпляр/объект/выражение, по которому выполняется вызов метода. Это должно вызвать VisitConstant
для оценки/перевода/повторного написания выражения экземпляра.
Затем в VisitConstant
, если я это сделать:
if (typeof(IQueryable).IsAssignableFrom(node.Type))
{
_builder.Append((node.Value as IQueryable).ToString());
}
он не работает.
Как получить текст запроса для ранее построенного запроса?
Независимо от того, используете ли вы синтаксис синтаксиса или синтаксис метода или выполняете ли операции в промежуточных переменных до того, как последующие операции будут вызваны, все буквально * zero * влияют на окончательный 'IQueryable'. – Servy
Можете ли вы добавить, как создается 'somecontext'? –
Как вы реализуете поставщик запросов, будет полностью зависеть от того, для чего вы создаете поставщика, как вы хотите его работать, какие операции вы хотите поддерживать, как вы хотите перевести различные операции LINQ на этот язык и т. Д. Как бы то ни было, вопрос нигде не подошел к ответственности. – Servy