我正在尝试从函数谓词构建sql where子句。我想要实现的目标如下:
public IEnumerable<TDbEntity> Query(Func<TDbEntity, bool> predicate)
{
// TODO: to build whereCondText from predicate
var whereCondText = "";
var sql = "SELECT * FROM TABLE WHERE " + whereCondText;
return DB.Connection.Query<TDbEntity>(sql);
}
答案 0 :(得分:0)
您可以这样做,但谓词必须采用Expression<Func<TDbEntity, bool>>
的形式。这告诉编译器构建代码的AST表示,而不是为代码发出IL。然后,您可以使用ExpressionVisitor
遍历树并创建谓词。
这不是一项微不足道的任务。您最好使用Entity Framework或Draper或nHibernate。为了简单的表达,你可以做一份体面的工作。