我正在寻找一些如何构建动态查询的提示和技巧。我有一个应用程序可以让用户在数据库表中搜索 10 个字段。根据 UI 中的哪些字段填充了值,查询应在数据库中的附加字段中搜索。
目前我正在尝试使用 StringBuilder 构建查询并添加 where 子句,但我真的不喜欢这样,我想知道是否有更好的方法来做到这一点,例如如果可能的话使用 LINQ。
也许有人可以提出想法或更好的一些示例代码。感谢,并有一个愉快的一天!
我正在寻找一些如何构建动态查询的提示和技巧。我有一个应用程序可以让用户在数据库表中搜索 10 个字段。根据 UI 中的哪些字段填充了值,查询应在数据库中的附加字段中搜索。
目前我正在尝试使用 StringBuilder 构建查询并添加 where 子句,但我真的不喜欢这样,我想知道是否有更好的方法来做到这一点,例如如果可能的话使用 LINQ。
也许有人可以提出想法或更好的一些示例代码。感谢,并有一个愉快的一天!
With LINQ it is pretty trivial:
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();
Each successive Where
composes the query with more filters; exactly what you want.
With raw TSQL, StringBuilder
isn't unreasonable; just make sure that you fully parameterize it. This might mean adding parameters in each term; for example:
...
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);
}
...