gpt4 book ai didi

sql - 将表达式树解析为 Sqlstring - 不是重新发明轮子

转载 作者:行者123 更新时间:2023-12-01 11:56:32 26 4
gpt4 key购买 nike

我需要解析表达式树以获得 sql where 子句。

.NET FX 或任何第三方库中是否没有任何类已经具有此功能?

我的意思是 Linq2SQL、EntityFramework,它们都必须这样做,所以有人知道,是否有可以重复使用的东西而不是重新发明轮子?

MyType.Where(Func<TEntity,bool>((entity)=>entity.Id == 5))) 

现在我需要获取表示 where 子句的相应字符串:

 where abc.Id = "5" 

这只是一个简单的例子。它也应该与逻辑连词一起使用。

我知道我可以创建表达式树并自行解析它,但我认为可能已经存在一些我遗漏的东西

最佳答案

你可以创建一个 ExpressionVisitor唯一目的是查找和处理 where 调用。使这项任务非常容易处理。

例如,

public class WhereCallVisitor : ExpressionVisitor
{
protected override Expression VisitMethodCall(MethodCallExpression node)
{
var method = node.Method;
if (method.Name == "Where" && method.DeclaringType == typeof(Queryable))
{ // we are in a Queryable.Where() call
ProcessWhereCall(node);
}
return base.VisitMethodCall(node);
}

private void ProcessWhereCall(MethodCallExpression whereCall)
{
// extract the predicate expression
var predicateExpr = ((dynamic)whereCall.Arguments[1]).Operand as LambdaExpression;
// do stuff with predicateExpr
}
// p.s., dynamic used here to simplify the extraction
}

然后使用它:

var query = from row in table
where row.Foo == "Bar"
select row.Baz;
var visitor = new WhereCallVisitor();
visitor.Visit(query.Expression);

关于sql - 将表达式树解析为 Sqlstring - 不是重新发明轮子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6592382/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com