Lambda匹配部分对象

问题描述 投票:0回答:1

我正在使用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代码来创建重载函数,但这似乎是多余的。

c# lambda dapper
1个回答
0
投票

您需要重新编写查询。请提供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();
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.