当前位置:  开发笔记 > 编程语言 > 正文

Linq选择返回字符串而不是对象

如何解决《Linq选择返回字符串而不是对象》经验,为你挑选了1个好方法。

我有以下代码:

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.但是,如何返回一个更改了其属性的对象?在注入之前使用对象初始化器不是一个选项,因为它被覆盖,在Inject之后使用它是不可能的,因为它还没有被铸造,所以我得到了这里似乎不起作用的解决方案.任何建议都非常感谢.



1> 小智..:

你正确猜到了什么是错的:你将lambda体改成了一个返回字符串的表达式.

你不能把lambda体写成一个能做你想要的单个表达式,但你不需要.您可以在lambda中放置多个语句:

var languages = _languageService
    .GetAll()
    .Select(x => {
        var lvm = (LanguageViewModel)new LanguageViewModel().InjectFrom(x);
        lvm.Code = x.Code.ToUpper();
        return lvm;
    })
    .ToList();

我喜欢用较少的打字方式来做到这一点.如果构造函数的属性设置符号被推广为"在返回值上设置属性",那将是非常酷的:

var foo = new Bar() { Armpit = new Flapdoodle() { Limpet = 2 } };
var baz = foo.Armpit { Limpet = 4 };

是的,我敢打赌,C#团队会放弃所有东西,然后继续吧......

我不知道明确的LanguageViewModel演员是否真的有必要,但是你有它,所以我把它留在了.

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有