C# 从谓词获取SQL语句?

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

是否可以基于谓词构建SQL语句的“WHERE”子句

例如:

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的原因是:

  • 使用整洁的表现
  • 我将执行一个存储过程来获取reocrd
  • 我使用的实体未映射到表。数据库中存在一个表,但这些实体只是用于检索记录的占位符POCO
  • 有可能吗?

    看看

    根据MSDN:

    获取有关LINQ to SQL生成的SQL命令的信息


    这将获得整个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