我正在测试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);
}
关于如何实现任意过滤器/搜索方法的任何想法?
谢谢!
答案 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);