Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.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/79.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# 用于排除Dapper中具有空值的参数的函数或方法_C#_Sql_Dapper - Fatal编程技术网

C# 用于排除Dapper中具有空值的参数的函数或方法

C# 用于排除Dapper中具有空值的参数的函数或方法,c#,sql,dapper,C#,Sql,Dapper,我想传递三个值,并使用Dapper获得相应的结果,但该类中的其他属性会自动接受空值,我想忽略这些参数。 现在我只是通过say param1并试图得到结果。然而,我的对象是param2和param3 connection.Query<T>("Query statement", whereConditions) 现在从UI上,我不确定是否会收到用户名、屏幕或操作。我可以从这三个中选一个。我的问题必须相应地改变 如果我创建一个匿名对象 var whereConditions = new

我想传递三个值,并使用Dapper获得相应的结果,但该类中的其他属性会自动接受空值,我想忽略这些参数。 现在我只是通过say param1并试图得到结果。然而,我的对象是param2和param3

connection.Query<T>("Query statement", whereConditions)
现在从UI上,我不确定是否会收到用户名、屏幕或操作。我可以从这三个中选一个。我的问题必须相应地改变

如果我创建一个匿名对象

var whereConditions = new { UserName = "Joe", Screen = "edit" }
它工作得很好,但如果是另一个参数,我需要将其作为

var whereConditions = new { UserName = "Joe", Screen = "edit", LogAction = "save" }
所以我需要了解如何将匿名对象作为where条件传递

希望此帮助

一种简单的方法(只有在始终可以忽略空白标准值时才有效,通常情况下,这些值来自UI表单)是始终传递所有三个参数,但构造一个跳过空白值的WHERE子句-例如

select ID, UserName, Screen, Url, LogAction
from LogTable
Where (@UserName = '' or UserName = @UserName)
and (@Screen = '' or Screen = @Screen)
and (@LogAction = '' or LogAction = @LogAction)
然后,您将传递所有三个值,而不管它们是否为null/blank

return conn.Query<Result>(
    @"
        select ID, UserName, Screen, Url, LogAction
        from LogTable
        Where (@UserName = '' or UserName = @UserName)
        and (@Screen = '' or Screen = @Screen)
        and (@LogAction = '' or LogAction = @LogAction)
    ",
    new
    {
        UserName = userName?? "",
        Screen = screen ?? "",
        LogAction = logAction ?? ""
    }
);
但是,如果您的请求总是有三个值(userName、screen和logAction),并且您只想忽略null/blank值,那么您当然可以调用

var data = GetData(request.UserName, request.Screen, request.LogAction);
一种简单的方法(只有在总是可以忽略空白标准值的情况下才有效,这种情况通常发生在这些值来自UI表单的情况下)是始终传递所有三个参数,但构造一个跳过空白值的WHERE子句-例如

select ID, UserName, Screen, Url, LogAction
from LogTable
Where (@UserName = '' or UserName = @UserName)
and (@Screen = '' or Screen = @Screen)
and (@LogAction = '' or LogAction = @LogAction)
然后,您将传递所有三个值,而不管它们是否为null/blank

return conn.Query<Result>(
    @"
        select ID, UserName, Screen, Url, LogAction
        from LogTable
        Where (@UserName = '' or UserName = @UserName)
        and (@Screen = '' or Screen = @Screen)
        and (@LogAction = '' or LogAction = @LogAction)
    ",
    new
    {
        UserName = userName?? "",
        Screen = screen ?? "",
        LogAction = logAction ?? ""
    }
);
但是,如果您的请求总是有三个值(userName、screen和logAction),并且您只想忽略null/blank值,那么您当然可以调用

var data = GetData(request.UserName, request.Screen, request.LogAction);

你用的是什么简洁的插件?据我所知,Dapper没有包含CRUD方法,我已在问题中进行了更正。有帮助吗@AlexKrupkaWhat的
查询语句
看起来像?仅具有表名且其中条件包含参数的sql查询为参数param(第二个可见参数)创建自定义对象。所以查询(“从Foo中选择*,其中Foo1=@Foo1和Foo2=@Foo2”,新的{obj.Foo1,obj.Foo2})。尽管正如@christiandev所说,如果你没有更好地了解查询和涉及的对象,就无法更具体地说明你在使用什么样的dapper插件?据我所知,Dapper没有包含CRUD方法,我已在问题中进行了更正。有帮助吗@AlexKrupkaWhat的
查询语句
看起来像?仅具有表名且其中条件包含参数的sql查询为参数param(第二个可见参数)创建自定义对象。所以查询(“从Foo中选择*,其中Foo1=@Foo1和Foo2=@Foo2”,新的{obj.Foo1,obj.Foo2})。尽管正如@christiandev所说,如果你不仔细看一下查询,那么所涉及的对象就再具体不过了