当前位置:  开发笔记 > 编程语言 > 正文

在C#/ .NET3.5中构建动态SQL查询的最佳方法?

如何解决《在C#/.NET3.5中构建动态SQL查询的最佳方法?》经验,为你挑选了1个好方法。

我正在研究的一个项目涉及重构一个C#Com对象,它作为一些Sql 2005数据库的数据库访问层.

现有代码的作者使用字符串和许多if语句手动构建了所有sql查询,以构造相当复杂的sql语句(~10个连接,> 10个子选择,~15-25 where条件和GroupBy).基表始终是相同的,但连接,条件和分组的结构取决于传递给我的类/方法的一组参数.

像这样构建sql查询确实有效,但它显然不是一个非常优雅的解决方案(而且很难阅读/理解和维护)...我可以自己写一个简单的"querybuilder",但我很确定我不是第一个遇到这种问题的人,因此我的问题是:

如何建立你的数据库查询?

C#是否提供了一种动态构建查询的简便方法?

sgwill.. 9

我使用C#和Linq做类似的事情来获取在用户输入上过滤的日志条目(请参阅条件Linq查询):

IQueryable matches = m_Locator.Logs;

// Users filter
if (usersFilter)
    matches = matches.Where(l => l.UserName == comboBoxUsers.Text);

 // Severity filter
 if (severityFilter)
     matches = matches.Where(l => l.Severity == comboBoxSeverity.Text);

 Logs = (from log in matches
         orderby log.EventTime descending
         select log).ToList();

编辑:直到最后一个语句中的.ToList()才执行查询.



1> sgwill..:

我使用C#和Linq做类似的事情来获取在用户输入上过滤的日志条目(请参阅条件Linq查询):

IQueryable matches = m_Locator.Logs;

// Users filter
if (usersFilter)
    matches = matches.Where(l => l.UserName == comboBoxUsers.Text);

 // Severity filter
 if (severityFilter)
     matches = matches.Where(l => l.Severity == comboBoxSeverity.Text);

 Logs = (from log in matches
         orderby log.EventTime descending
         select log).ToList();

编辑:直到最后一个语句中的.ToList()才执行查询.

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有