【发布时间】:2019-07-16 17:30:02
【问题描述】:
我想创建一个可以接受表达式并使用 Linq-To-Sql 生成所需 SQL 语句的存储库模型。
例如,我有这样一个函数:
// Possible criteria
Expression<Func<Purchase,bool>> criteria1 = p => p.Price > 1000;
// Function that should take that criteria and convert to SQL statement
static IEnumerable<Customer> GetCustomers (Expression<Func<Purchase,bool>> criteria)
{
// ...
}
在函数内部,我想使用 Linq-To-Sql 将条件转换为 SQL 语句。
我知道您可以使用DataContext.Log 查看已执行的查询,并使用DataContext.GetCommand(query).CommandText 在执行前查看完整的查询。但是,我只想生成整个表达式的一部分。
我希望完成的是让我的存储库抽象底层技术(Linq-to-Sql、Dapper 等)。这样我就可以将表达式传递到存储库,让它生成正确的语句并使用正确的技术来执行它。
【问题讨论】:
-
当你说“只是一部分”时——哪一部分?例子?
-
本例中的 where 子句
-
在一般情况下,查询可能需要更多。导航子属性可以添加连接,例如...
-
同意。我试图找到一个适用于 WHERE 子句的案例,而不是通用的“编写任何表达式并发疯”——如果最终生成的 SQL 无效,我很高兴抛出异常。
-
您总是可以从生成的查询中解析
WHERE子句。
标签: c# linq-to-sql dapper