通过LINQ访问集合并将单个成员设置为新对象

时间:2012-05-30 12:18:00

标签: linq

我正在尝试使用id = to users101访问集合中的用户对象,并将其设置为其他用户。

Controller.MyObject.SingleOrDefault(x => x.Id == "user101") = OtherUser();

提前致谢。

2 个答案:

答案 0 :(得分:1)

使用一个LINQ表达式无法实现。

通常LINQ扩展适用于枚举,如果MyObject是一个集合,首先必须找到所需的项目,然后用新对象覆盖它(而且SingleOrDefault()只会在条件不是时返回null满意)。

你应该写这样的东西(确切的代码取决于MyObject是什么):

var item = Controller.MyObject.SingleOrDefault(x => x.Id == "user101");
if (item != null)
    Controller.MyObject[Controller.MyObject.IndexOf(item)] = new OtherUser();

请注意,如果您确实不需要SingleOrDefault()执行检查,则可以简化代码(并避免在SingleOrDefault()IndexOf()中执行双重搜索。)

如果这是“性能关键”,那么编写一个可以一次完成此任务的临时实现更好。

答案 1 :(得分:-1)

尝试两行:

var objectWithId = Controller.MyObject.SingleOrDefault(x => x.Id == "user101");
(objectWithId as WhateverTypeOfObjectOtherUserIs) = OtherUser();