首页 / 知识
在C#/。NET3.5中构造动态SQL查询的最佳方法?
2023-04-15 08:48:00

Best way of constructing dynamic sql queries in C#/.NET3.5?我目前正在处理的一个项目涉及重构C#Com对象,该对象用作对某些Sql 2005数据库的数据库访问层。 现有代码的作者已使用字符串和许多if语句手动构建了所有sql查询,以构造相当复杂的sql语句(?10个联接,> 10个子选择,?15-25个条件和GroupBy的条件) 。基本表始终是相同的,但是联接,条件和分组的结构取决于传递到我的类/方法中的一组参数。 像这样构造sql查询确实可以,但是它显然不是一个非常优雅的解决方案(并且同样很难阅读/理解和维护)...我自己可以编写一个简单的" querybuilder",但是我非常确定我不是第一个遇到这种问题的人,因此我的问题是:
我使用C#和Linq进行了类似的操作,以根据用户输入过滤日志条目(请参阅条件Linq查询):
编辑:直到最后一条语句中的.ToList()才执行查询。 除非执行时间真的很重要,否则我将考虑重构业务逻辑,这种业务逻辑(经常)倾向于找到其到达数据层以及成千上万亿个存储proc的方式。在可维护性,可编辑性和附加性方面,我一直试图(作为C#程序员)将代码提升到业务层。 尝试挑选其他人的8000行SQL脚本不是我最喜欢的任务。 :) // W 我来晚了,没有机会投票,但是我没有想到一个很好的解决方案:过程/函数与linq-to-object的结合。还是我想的to-xml或to-datatable。 在这种情况下,我一直处于这种状态,它具有巨大的动态构建的查询,虽然取得了令人印象深刻的成就,但是其复杂性却导致了一场噩梦。我有很多绿色评论来帮助可怜的汁液,这些汁液必须稍后再来理解。我当时使用的是经典的ASP,因此我几乎没有其他选择。 此后我要做的是功能/过程和linq的组合。通常,总的复杂性小于尝试在一个地方进行的复杂性。将您的某些条件传递给UDF,这将变得更加易于管理。这为您提供了易于管理和可理解的结果集。使用linq应用其余的区别。 您可以同时使用两者的优点:
如何决定在db中处理哪些条件以及使用linq处理哪些条件?用你的判断。如果您可以有效地处理复杂的数据库查询,则可以处理。部分是艺术,部分是科学。 Linq to SQL与System.Linq.Dynamic一起带来了一些不错的可能性。 我在这里发布了一些示例代码片段: ...在这里: 我了解Linq的潜力,但是我还没有看到有人尝试对Ben建议的复杂性进行Linq查询。
有人有关于大型Linq查询的示例,以及有关其可管理性的任何评论吗? 值得考虑的是,是否可以将其实现为参数化的受支持过程并在数据库中对其进行优化,而不是在运行时通过LINQ或ORM动态生成SQL。通常,这会更好。我知道它有些过时,但有时是最有效的方法。 这是我要做的方式:
您传入的Expression参数将是将使用不同的WHERE子句,JOINS等构建的动态查询。此Expression将在运行时被调用并提供您所需的内容。 这里是如何调用它的示例:
LINQ是必经之路。 查看http://sqlom.sourceforge.net。我认为它确实满足您的需求。 在http://www.blackbeltcoder.com/Articles/strings/a-sql-querybuilder-class上的QueryBuilder类上进行了一种实验性尝试。可能值得一看。 如果使用C#和.NET 3.5,并添加MS SQL Server,则LINQ to SQL绝对是可行的方法。如果您使用的不是该组合,则建议您使用ORM路由,例如nHibernate或Subsonic。 您可能需要考虑使用LINQ或类似这样的O / R映射器:http://www.llblgen.com/ |
最新内容
相关内容
linux线程查询命令?
linux线程查询命令?,系统,第一,线程,命令,软件,名称,信息,进程,选项,方法,Linux系统如何查看进程的线程数1、第一种方法:top命令法首先执行toplinux命令左右查询?
linux命令左右查询?,系统,信息,管理,地址,工作,命令,文件,单位,位置,数据,linux查看路径命令1、linux命令如果记不得,可以使用man命令来查看某linux简单查询命令?
linux简单查询命令?,地址,命令,信息,设备,电脑,系统,工作,文件,终端,内容,Linux下查看文件命令选择1、查看文件的命令,主要就是用 cat命令, cat+查询linux配置的命令?
查询linux配置的命令?,系统,网络,地址,情况,信息,电脑,中科,状态,服务,命令,在linux下如何通过命令查网卡配置1、linux查看系统网卡信息的命令查询linux配置的命令?
查询linux配置的命令?,系统,网络,地址,情况,信息,电脑,中科,状态,服务,命令,在linux下如何通过命令查网卡配置1、linux查看系统网卡信息的命令linux命令查询时间?
linux命令查询时间?,时间,系统,状态,信息,数据,标准,地址,平台,环境,命令,在windws下模拟Linux下可获取命令执行时间的time命令time命令可以查linux查询翻页命令?
linux查询翻页命令?,工作,地址,系统,信息,命令,工具,目录,管理,暂停,标准,Linux常用命令1、linux系统常用操作命令如下:ls:全拼list,功能是列出目查询linux上调度命令?
查询linux上调度命令?,系统,策略,实时,信息,状态,时间,进程,电脑,报告,分析,Linux中如何启动进程?进程调度命令有哪些?1、实现调度启动进程的linux查询网关命令?
linux查询网关命令?,网络,信息,地址,环境,系统,网关,名字,中心,状态,命令,linux怎么查看网关1、打开终端窗口。输入以下命令并按下回车键 routlinux使用命令的方法?
linux使用命令的方法?,系统,信息,工具,标准,数据,命令,左下角,目录,文件夹,图标,linux的cd命令的使用方法1、cd ~:回到用户家目录。注:这得看你linux无效对象的命令?
linux无效对象的命令?,软件,系统,单位,网络,管理,术语,检测,电脑,环境,风险,linux疑问:普通用户的ifconfig命令无法执行,如何解决?建议这个操linux命令查询参数?
linux命令查询参数?,网络,信息,设备,系统,服务,状态,情况,工作,地址,命令,Linux常用命令1、linux系统常用操作命令如下:ls:全拼list,功能是列出目