使用Linq-to-Sql表达式生成SQL子句

我想创建一个可以使用Expression并使用Linq-To-Sql生成所需SQL语句的存储库模型。

例如,我有一个这样的function:

// Possible criteria Expression<Func> criteria1 = p => p.Price > 1000; // Function that should take that criteria and convert to SQL statement static IEnumerable GetCustomers (Expression<Func> criteria) { // ... } 

在函数内部,我想使用Linq-To-Sql将条件转换为SQL语句。

我知道你可以使用DataContext.Log来查看执行的查询和DataContext.GetCommand(query).CommandText以便在执行之前查看完整的查询。 但是,我想只生成整个表达式的一部分。

我希望完成的是使我的存储库抽象出底层技术(Linq-to-Sql,Dapper等)。 这样我就可以将Expression传递给存储库,让它生成正确的语句并使用正确的技术来执行它。

你可以这样做:

 string sql = DataContext.GetTable().Where(criteria).ToString(); 

ToString()为您提供SQL表达式。 然后,您可以使用正则表达式来提取WHERE子句。