我有以下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对数组?
你可以这样做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}
值
问题出在哪儿?
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 } );
但是当你将它分配给一个视图时,我怀疑你可以在这里使用匿名类型.
使用Dictionary
over数组KeyValuePair
具有还检查重复键的优点.如果你想避免这种使用ToLookup
,那将使重复键变为现实.