Lambda匹配部分对象

时间:2018-09-07 12:00:57

标签: c# lambda dapper

我正在使用dapper和lambda表达式,以便从数据库中检索数据。我不想传递大量的重载表达式,而是要传递一个数据库对象,并使lambda表达式与找到的最接近或第一个对象匹配。

 <VirtualHost *:80>
    DocumentRoot "/var/www"
    ServerName localhost
</VirtualHost>
    <VirtualHost *:80>
        ServerName quickstart.local
        DocumentRoot /var/www/html/quickstart/zendAuth/public

        SetEnv APPLICATION_ENV "development"

        <Directory /var/www/html/quickstart/zendAuth/public>
            DirectoryIndex index.php
            AllowOverride All
            Order allow,deny
            Allow from all
        </Directory>
    </VirtualHost>

And in hosts file at the top  of the file i have added this  `127.0.0.1    quickstart.local`

Can any one check and let me where i have done mistake and please help me out.

在上面的示例中,您可以看到我正在将“ User”对象传递给函数,该用户对象可能是预期对象的50%。例如,如果对象有2个字符串,则ID和用户名。但是我只知道用户名。我将创建一个新用户作为ref或out参数,并让查询填充丢失的数据。

有什么想法吗?我可以使用诸如GetUserByID和GetUserByName这样的双重代码在重载函数上创建大量功能,但这似乎是多余的。

1 个答案:

答案 0 :(得分: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();
        }
    }