Лямбда-совпадение на частичном объекте - PullRequest
0 голосов
/ 07 сентября 2018

Я использую dapper и лямбда-выражение для извлечения данных из базы данных. Вместо того, чтобы создавать кучу перегруженных выражений, я хочу передать один объект базы данных, чтобы лямбда-выражения совпадали с ближайшим или первым найденным объектом.

public static User GetUser(User pUser)
{
    using (IDbConnection connection = new SqlConnection(Connection))
    {
        return connection.Query<User>("SELECT * FROM dbo.USERS").(m => m == pUser);
    }
}

В приведенном выше примере вы можете видеть, что я передаю объект «Пользователь» в функцию, этот пользовательский объект может составлять 50% от ожидаемого объекта. например, если у объекта было 2 строки, идентификатор и имя пользователя. Но я знал только имя пользователя. Я бы создал нового пользователя в качестве параметра ref или out, и запрос должен заполнить недостающие данные.

Мысли? Я мог бы создать множество перегруженных функций с дублированным кодом, таким как GetUserByID и GetUserByName, но это кажется избыточным.

1 Ответ

0 голосов
/ 07 сентября 2018

Вам необходимо переписать запрос. Просьба предоставить структуру таблицы 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();
        }
    }
...