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

在C#中使用Lambda返回key => value对的数组

如何解决《在C#中使用Lambda返回key=>value对的数组》经验,为你挑选了2个好方法。

我有以下Lambda表达式,它返回一个结果属性数组:

ViewBag.Items = db.Items.Select(m => new { m.Id, m.Column1, m.Column2 }).ToArray();

这按预期工作,但我需要结果是一个键=>值对,其中Id是关键,Column1和Column2是值.我找到了关于如何创建Dictionary的示例,但没有找到仅隔离结果中的特定列的示例.

ViewBag.Items 使用以下命令在View中为jQuery本地化:

var _items = @Html.Raw(Json.Encode(ViewBag.Items));

如何更改上面的Lambda以生成key => value对数组?



1> Maksim Simki..:

你可以这样做ToDictionary:

db.Items.Select(m => new { m.Id, m.Column1, m.Column2 })
        .ToDictionary(x=>x.Id, x=>new {x.Column1, x.Column2});

如果您希望将Id作为Value来考虑HimBromBeere的良好解决方案,那么这将为您Dictionary提供Id关键和{Column1, Column2}


我认为可以跳过`.Select()`
@Eric它可能,但是如果这不是对象的LINQ(看起来像),那么最好不要跳过**.如果`db.Items`是一个数据库表,那么`Select`将只检索直接`ToDictionary`调用将检索整个记录所需的字段.

2> HimBromBeere..:

问题出在哪儿?

ViewBag.Items = db.Items.Select(m => new KeyValuePair
    ( 
        m.Id, 
        new MyType { Column1 = m.Column1, Column2 = m.Column2 }
    )).ToArray();

但无论如何a Dictionary只是一个列表KeyValuePair,所以为什么不使用它呢?

ViewBag.Items = db.Items.ToDictionary(
        m => m.Id, 
        m => new MyType { Column1 = m.Column1, Column2 = m.Column2 });

当然你也可以使用Dictionary:

ViewBag.Items = db.Items.ToDictionary(
        m => m.Id, 
        m=> new { m.Column1, m.Column2 } );

但是当你将它分配给一个视图时,我怀疑你可以在这里使用匿名类型.

使用Dictionaryover数组KeyValuePair具有还检查重复键的优点.如果你想避免这种使用ToLookup,那将使重复键变为现实.


@HaraldCoppoolse你在调用'ToArray`时也会失去延迟执行,所以这不相关.
推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有