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

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

目前我正在尝试使用StringBuilder构建查询并添加where子句但我真的不喜欢这个,我想知道是否有更好的方法来做到这一点,例如使用LINQ,如果可能的话。

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

使用LINQ它非常简单:

IQueryable 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用更多的filter组成查询; 正是你想要的。

使用原始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); } ...