Dapper查询任意属性

时间:2018-12-24 14:58:34

标签: dapper

我正在测试Dapper项目,但遇到了一个用例,我不太清楚。对于用户存储库,我有一个运行良好的GetById方法:

public static IEnumerable<User> GetById(IDbConnection connection, string identity)
    {
        string query = "SELECT * FROM USERS.USERINFO WHERE Id = @Id";
        return connection.Query<User>(query, new User { Id = identity });
    }

但是我也希望能够通过任意属性或一组属性来查询我的用户。这可能吗?我曾经考虑过简单地动态构建SQL查询字符串,但是想知道Dapper是否提供了这样的东西?

我采用的另一种方法是使用IEnumerable Where方法进行查询,但是我猜测这是相当低效的:

public static IEnumerable<User> Search(IDbConnection connection, Func<User, bool> predicate)
    {
        string query = "SELECT * FROM USERS.USER_INFO";
        return connection.Query<User>(query).Where(predicate);
    }

关于如何实现任意过滤器/搜索方法的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用SqlBuilder并动态添加更多Where子句:

 const string sqlTemplate = "SELECT * FROM USERS.USERINFO /**where**/";

 var sqlBuilder = new SqlBuilder();
 var template = sqlBuilder.AddTemplate(sqlTemplate);

 sqlBuilder.Select("*").Where("Id = @Id", new { Id = id });

 return connection.Query<User>(query);