构建动态SQL查询的最佳实践

时间:2013-03-23 08:26:27

标签: c# sql sql-server linq

我正在寻找一些如何构建动态查询的技巧和窍门。我有一个应用程序,它允许用户搜索数据库表中的10个字段。根据UI中哪些字段填充值,查询应在DB中的其他字段中搜索。

目前我正在尝试使用StringBuilder构建查询并添加where子句,但我真的不喜欢这个,我想知道是否有更好的方法来执行此操作,例如使用LINQ(如果可能)。

也许有人可以提出想法或更好的示例代码。谢谢,祝你有愉快的一天!

1 个答案:

答案 0 :(得分:8)

使用LINQ非常简单:

IQueryable<User> users = db.Users;

if(name != null) users = users.Where(u => u.Name == name);
if(dept != null) users = users.Where(u => u.Dept == dept);
...

var page = users.OrderBy(u => u.Name).Take(100).ToList();

每个后续Where 用更多过滤器组合查询;正是你想要的。

使用原始TSQL,StringBuilder并非不合理;只需确保您完全参数化它。这可能意味着在每个术语中添加参数;例如:

...
if(name != null) {
    sql.Append(" and u.Name = @name");
    cmd.Parameters.AddWithValue("name", name);
}
if(dept != null) {
    sql.Append(" and u.Dept = @dept");
    cmd.Parameters.AddWithValue("dept", dept);
}
...