【问题标题】:Using Automapper to update one item in a list of items使用 Automapper 更新项目列表中的一项
【发布时间】:2016-01-06 13:52:10
【问题描述】:

我有一个private List<User> _userList = new List<User>();User 类中有许多属性,即FirstName, Email, .. 等。我想有选择地只更新_userList 中的一项 在我的类中考虑以下方法,我在其中传递包含更新值的 User 对象。

    public void Save(User saveThis)
    {
        var user = _userList.FirstOrDefault(u => u.RowId == saveThis.RowId);

        user = Mapper.DynamicMap<User>(saveThis);
    }

由于User 上有很多属性,我正在使用 Automapper 进行分配。我不需要创建任何映射,因为源和目标是相同的类型。上面的代码也可以工作到调用 Automapper 的第二行。问题是我不知道如何把这个更新的对象user放回_userList类型的列表中

【问题讨论】:

    标签: c# .net collections ienumerable


    【解决方案1】:

    您可以获取用户的索引,然后使用(列表的)索引器替换对象,如下所示:

    public void Save(User saveThis)
    {
        var user_index = _userList
            .Select((item, index) => new {Item = item, Index = index})
            .Where(u => u.Item.RowId == saveThis.RowId)
            .Select(u => (int?)u.Index) //We case to int? to be able to handle the case where the user it not found if we want
            .FirstOrDefault();
    
        if(user_index == null) //We can handle the case if the user is not found
            return;
    
        var result = Mapper.DynamicMap<User>(saveThis);
    
        _userList[user_index.Value] = result;
    }
    

    【讨论】:

    • 谢谢,这行到底发生了什么:.Select((item, index) =&gt; new { Item = item, Index = index })
    • 对于每个项目,这将创建一个具有两个属性的匿名对象;项目本身及其在列表中的索引。
    猜你喜欢
    • 2017-10-30
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    相关资源
    最近更新 更多