Более щадящий запрос по произвольным свойствам - PullRequest
0 голосов
/ 24 декабря 2018

Я работаю над тестовым проектом 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 голосов
/ 24 декабря 2018

Вы можете использовать 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);
...