是否可以从C#函数谓词构建SQL where子句?

时间:2017-09-06 11:07:23

标签: c# sql .net linq dapper

我正在尝试从函数谓词构建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);
}

1 个答案:

答案 0 :(得分:0)

您可以这样做,但谓词必须采用Expression<Func<TDbEntity, bool>>的形式。这告诉编译器构建代码的AST表示,而不是为代码发出IL。然后,您可以使用ExpressionVisitor遍历树并创建谓词。

这不是一项微不足道的任务。您最好使用Entity Framework或Draper或nHibernate。为了简单的表达,你可以做一份体面的工作。