为此实现提供程序并不难:
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());
}
它不起作用。
如何获取先前构建的查询的查询文本?