【发布时间】:2016-01-07 15:36:32
【问题描述】:
我有以下代码:
var languages = _languageService
.GetAll()
.Select(x => (((LanguageViewModel) new LanguageViewModel().InjectFrom(x))))
.ToList();
执行此操作时,languages 正如预期的那样成为LanguageViewModel 对象的集合:
我要做的是,在选择时,还将对象的Code 属性转换为大写,如下所示:
var languages = _languageService
.GetAll()
.Select(x => (((LanguageViewModel) new LanguageViewModel().InjectFrom(x)).Code = x.Code.ToUpper()))
.ToList();
我希望 languages 对象中有多个 LanguageViewModels,但它看起来像这样:
我的猜测是我使用像Select(x => (new Object().Property = Value)) 这样的语句,它选择了Property。但是,我怎样才能返回一个改变了它的属性之一的对象呢?在注入之前使用对象初始化器不是一个选项,因为它会被覆盖,在注入之后使用它是不可能的,因为它还没有被强制转换,所以我在这里找到了似乎不起作用的解决方案。非常感谢任何建议。
【问题讨论】:
-
您只选择了代码。考虑使用辅助方法来映射/格式化您的对象。
-
您已经使用
InjectFrom()方法从Language实体映射LanguageViewModel。为什么不在映射方法中使用this.Code = languge.Code.ToUpper()?这就是视图模型的全部意义——它可以根据视图的特定需求进行自我调整...... -
InjectFrom() 是 Omu.ValueInjecter 中的一个函数,Omu.ValueInjecter 是一个专门用于值注入的 NuGet 包。改变它是个好主意吗?我怀疑它..