rwk*_*iii 4 .net c# linq lambda
我有以下Lambda表达式,它返回一个结果属性数组:
ViewBag.Items = db.Items.Select(m => new { m.Id, m.Column1, m.Column2 }).ToArray();
Run Code Online (Sandbox Code Playgroud)
这按预期工作,但我需要结果是一个键=>值对,其中Id是关键,Column1和Column2是值.我找到了关于如何创建Dictionary的示例,但没有找到仅隔离结果中的特定列的示例.
ViewBag.Items 使用以下命令在View中为jQuery本地化:
var _items = @Html.Raw(Json.Encode(ViewBag.Items));
Run Code Online (Sandbox Code Playgroud)
如何更改上面的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});
Run Code Online (Sandbox Code Playgroud)
如果您希望将Id作为Value来考虑HimBromBeere的良好解决方案,那么这将为您Dictionary提供Id关键和{Column1, Column2}值
问题出在哪儿?
ViewBag.Items = db.Items.Select(m => new KeyValuePair<string, MyType>
(
m.Id,
new MyType { Column1 = m.Column1, Column2 = m.Column2 }
)).ToArray();
Run Code Online (Sandbox Code Playgroud)
但无论如何a Dictionary只是一个列表KeyValuePair,所以为什么不使用它呢?
ViewBag.Items = db.Items.ToDictionary(
m => m.Id,
m => new MyType { Column1 = m.Column1, Column2 = m.Column2 });
Run Code Online (Sandbox Code Playgroud)
当然你也可以使用Dictionary<anonymous, anonymous>:
ViewBag.Items = db.Items.ToDictionary(
m => m.Id,
m=> new { m.Column1, m.Column2 } );
Run Code Online (Sandbox Code Playgroud)
但是当你将它分配给一个视图时,我怀疑你可以在这里使用匿名类型.
使用Dictionaryover数组KeyValuePair具有还检查重复键的优点.如果你想避免这种使用ToLookup,那将使重复键变为现实.
| 归档时间: |
|
| 查看次数: |
1695 次 |
| 最近记录: |