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