Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 构建动态SQL查询的最佳实践_C#_Sql_Sql Server_Linq - Fatal编程技术网

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

C# 构建动态SQL查询的最佳实践,c#,sql,sql-server,linq,C#,Sql,Sql Server,Linq,我正在寻找一些如何构建动态查询的技巧和技巧。我有一个应用程序,它允许用户搜索数据库表中的10个字段。根据UI中哪些字段填充了值,查询应在DB中的其他字段中搜索 目前,我正在尝试使用StringBuilder构建查询并添加where子句,但我真的不喜欢这样做,我想知道是否有更好的方法来实现这一点,例如,如果可能,使用LINQ 也许有人可以提出一些想法或更好的示例代码。谢谢,祝你今天愉快 对于LINQ来说,它非常简单: IQueryable<User> users = db.Users;

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

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


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

对于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();

您要搜索多少数据,数百万条记录,数百条记录,数千条记录,您能提供更多关于您希望进行的并发搜索的频率和数量的信息吗?并发搜索将很低,这意味着每天每小时只有5人进行少量查询。表中约有800000条记录。您可以查看这篇codeproject.com文章。为了防止任何人对速度感到疑惑,需要补充一点:Linq的工作速度往往与存储过程一样快。但是如果你需要大量的搜索速度,你应该考虑一个带有全文索引的视图。是啊,林克看起来真不错。很好用。我的代码应该更多地进入Linq世界。再次感谢@在大多数情况下,尤其是由于这是一个相等搜索,标准的非聚集索引将很好地工作
...
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);
}
...