所以我有一个字典(Employees2Name)的int => (某些类)我需要转换为int =>键值对的排序列表(班上的一些财产)
我的工作正常,这是个好消息。看起来我正在做一个额外的步骤是否有一种方法可以通过强制转换来缩短linq。
ComboBoxValues.Employees2Name.Select(k => new {Key = k.Key, Value = k.Value.Name})
.ToDictionary(k => k.Key, v => v.Value)
.ToList<KeyValuePair<int, string>>()
.OrderBy(kp => kp.Value)
词典的第二个似乎是多余的。
答案 0 :(得分:2)
似乎所有你需要的是
ComboBoxValues.Employees2Name
.Select(k => new KeyValuePair<int, string>(k.Key, k.Value.Name))
.OrderBy(item => item.Value);
只需Select
和OrderBy
;请尝试实现(即ToList()
,ToDictionary()
),尤其是Linq中间的
答案 1 :(得分:0)
无需使用select
和orderby
。你可以尝试这个
SortedList<int, string> sortedList =
new SortedList<int, string>(ComboBoxValues.Employees2Name
.ToDictionary(i => i.Key, i => i.Value.Name));
答案 2 :(得分:0)
Dictionary类已经实现了IEnumerable&gt;,这是OrderBy()的有效输入,然后应用ToList&gt;()似乎完全没用。
此外,我认为ToDictionary调用浪费了内存和时间,因为您正在构建字典(其主要目的是通过键保持项目唯一)来自简单的项集合,然后按值对其进行排序(而不是键,因此没有从字典&lt;,&gt;中获得任何好处。类。
我会将您的代码重写为
ComboBoxValues.Employees2Name.Select(k => new KeyValuePair<int, string>(k.Key, k.Value.Name))
.OrderBy(kp => kp.Value)
此致 丹尼尔。
答案 3 :(得分:0)
@Servy评论反映了最佳答案。
你已经有了这个
IEnumberable<KeyPairValue<int, Class>>
您只需要将名称放入字典,然后按
@Html.PopulateCombobox(ComboBoxValues.Employees2Name
.ToDictionary(k => k, v => v.Value.Name)
.OrderBy(v => v.Value)