我正在使用dapper和lambda表达式来从数据库中检索数据。我想传入一个数据库对象,并在找到的最近或第一个对象上使我的lambda表达式匹配,而不是构建大量重载表达式。
public static User GetUser(User pUser)
{
using (IDbConnection connection = new SqlConnection(Connection))
{
return connection.Query<User>("SELECT * FROM dbo.USERS").(m => m == pUser);
}
}
在上面的示例中,您可以看到我将“User”对象传递给函数,此用户对象可能是所需对象的50%。例如,如果对象有2个字符串,则ID和用户名。但我只知道用户名。我会创建一个新用户作为ref或out参数,并让查询填写缺少的数据。
思考?我可以使用像JoUserByID和GetUserByName这样的duplated代码来创建重载函数,但这似乎是多余的。
您需要重新编写查询。请提供dbo.Users表的结构。
将过滤器逻辑放在查询内部并使用表列来匹配记录而不是整个对象。
public static User GetUser(User pUser)
{
using (IDbConnection connection = new SqlConnection(Connection))
{
return connection.Query<User>("Select * FROM dbo.Users where userID = @UserId", pUser).FirstOrDefault();
}
}