如何调用 L2S 提供者以 Func形式翻译谓词到 SQL where 子句?
我在应用程序中使用 L2S,但我越来越多地切换到 dapper.net 因为我在查询性能方面遇到了重大问题,并且遇到了烦人的 n+1选择问题。
它工作正常,但我怀念过滤数据时舒适的 LINQish 编写谓词的风格。
所以我的问题是,如何将 Func
形式的谓词转换为 SQL Server where 子句以与 dapper 一起使用?
我想以前一定有人这样做过,或者所有精致的用户都手工编码他们的 sql 语句吗?
正如标题所示,也许可以选择调用 SQL Server 的 LINQ2SQL 提供程序?
基本上我正在寻找类似动态 linq 的逆函数。
I am using L2S in my application but i'm switching more and more to dapper.net because i'm having major issues with query performance and the annoying n+1 selects problem.
Its working fine, but i miss the comfortable LINQish style of writing predicates when filtering data.
So my question is, how can i translate a predicate in form of Func<T, bool>
to a SQL Server where clause to use it with dapper?
I think someone must have done this before, or are all the dapper users handcoding their sql statements?
As the title suggests, maybe it is an option to call the LINQ2SQL provider for SQL Server?
Basically i'm looking for something like the inverse of dynamic linq.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
有多种方法可以查看 LINQ 生成的 SQL。请参阅文章 查看 LINQ to Entity 查询生成的 SQL 来自 Visual Studio 杂志。
现在我更好地了解了您的需求,我对此进行了更多研究,发现了一些值得一看的相关帖子:
dapper 中的动态 where 子句 建议使用 Stringbuilder,但其中一条评论指向 Sam Saffron 文章,移植 LINQ -2-SQL to Dapper for Great Justice,其中谈到了可能对您有帮助的贡献的 SqlBuilder。
使用 Linq-to-Sql 表达式生成 SQL 子句 建议使用 LINQWhere 调用并从生成的 SQL 中获取 WHERE 子句。
There are ways to see the SQL generated by LINQ. See the article Seeing the SQL Generated by LINQ to Entity Queries from Visual Studio Magazine.
Now that I understand better what you're after, I did a little more looking into this and found a couple of related posts that are worth a look:
Dynamic where clause in dapper which suggests using a Stringbuilder, but one of the comments points to a Sam Saffron article, Porting LINQ-2-SQL to Dapper for great justice, that talks about a contributed SqlBuilder that might help you.
Generate a SQL clause using a Linq-to-Sql Expression which suggests using a LINQ Where call and grabbing the WHERE clause from the generated SQL.