Метод, который принимает строго типизированное имя свойства в качестве параметра

1

Я бы хотел реорганизовать эти два метода, единственное отличие - это свойство объекта currentUser, который обновляется (и имя параметра, но это не важно).

public User SaveBaselineModelTemplateId(int baselineModelTemplateId)
{
    using (var db = _contextFactory.GetContext())
    {
        var currentUser = db.Users.Single(x => x.Login == Environment.UserName);
HERE -> currentUser.BaselineModelTemplateID = baselineModelTemplateId; 
        db.SaveChanges();
        return currentUser;
    }
}

public User SaveComparisonModelTemplateId(int comparisonModelTemplateId)
{
    using (var db = _contextFactory.GetContext())
    {
        var currentUser = db.Users.Single(x => x.Login == Environment.UserName);
HERE -> currentUser.ComparisonModelTemplateID = comparisonModelTemplateId; 
        db.SaveChanges();
        return currentUser;
    }
}

Мне нужен метод, который я мог бы назвать как SaveInt(ComparisonModelTemplateID, 42) или SaveInt(x => x.ComparisonModelTemplateID, 42). Кажется, есть способ сделать это с помощью деревьев выражений, но я не мог найти точных примеров того, что я ищу, спасибо.

Теги:

1 ответ

5
Лучший ответ

Для этого вам не требуется дерево выражений - достаточно простого Action<User>:

private User ModifyAndSave(Action<User> modify) {
    using (var db = _contextFactory.GetContext())
    {
        var currentUser = db.Users.Single(x => x.Login == Environment.UserName);
        modify(currentUser);
        db.SaveChanges();
        return currentUser;
    }
}
public User SaveBaselineModelTemplateId(int baselineModelTemplateId)
{
     return ModifyAndSave(u => u.BaselineModelTemplateID = baselineModelTemplateId);
}
public User SaveComparisonModelTemplateId(int comparisonModelTemplateId)
{
     return ModifyAndSave(u => u.ComparisonModelTemplateID = comparisonModelTemplateId);
}

Два public выше способов передать различные действия к общему ModifyAndSave выше способом. Общий метод принимает Action<User> который сообщает ему, что делать с объектом User полученным из базы данных, до сохранения изменений.

  • 0
    Оглядываясь в прошлое, спасибо большое

Ещё вопросы

Сообщество Overcoder
Наверх
Меню