C# 从谓词获取SQL语句?
是否可以基于谓词构建SQL语句的“WHERE”子句 例如:C# 从谓词获取SQL语句?,c#,linq,predicate,C#,Linq,Predicate,是否可以基于谓词构建SQL语句的“WHERE”子句 例如: public override IQueryable<Customer> SearchFor(Expression<Func<Customer, bool>> predicate) { } 但是,在这个特定场景中,我需要重写该方法,并基于谓词参数构建一个sql语句,并直接对数据库执行该语句(跳过EF) 所以我的新方法是: public override IQ
public override IQueryable<Customer>
SearchFor(Expression<Func<Customer, bool>> predicate)
{ }
但是,在这个特定场景中,我需要重写该方法,并基于谓词参数构建一个sql语句,并直接对数据库执行该语句(跳过EF)
所以我的新方法是:
public override IQueryable<Customer> SearchFor(Expression<Func<Customer, bool>> predicate)
{
var where = predicate.ToString(); //Not actual code!!
var sql = "SELECT id, name FROM customers WHERE " + where;
//Execute sql statement
}
本例中的客户实体只是一个示例。我构建sql语句而不是使用EF的原因是:
这将获得整个SQL,但一些字符串操作将获得Where子句。我编写了转换为SQL的代码 -包括SqlGenerator 例如:
var account = accountsRepository.FindAsync(x => x.Id == id)
生成:
SELECT Accounts.Id, Accounts.Name, FROM Accounts WHERE Accounts.Id = @Id
您可以使用custom表达式作为谓词,您能解释一下您想要什么吗?可能是代码示例?这听起来很像X-Y问题。您可能想解释为什么需要捕获SQL并直接运行它,可能有一种不太“黑客”的方式。
var account = accountsRepository.FindAsync(x => x.Id == id)
SELECT Accounts.Id, Accounts.Name, FROM Accounts WHERE Accounts.Id = @Id