在 select 之后将字典转换为键值对
Cast A Dictionary after a select to a KeyValue Pair
所以我有一个字典 (Employees2Name) Of int => (some class) 我需要将其转换为 int => (some 属性 in class)
我的这个工作正常,这是个好消息。看起来我正在做一个额外的步骤,有没有办法在 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)
字典的第二个似乎多余。
看来你只需要
ComboBoxValues.Employees2Name
.Select(k => new KeyValuePair<int, string>(k.Key, k.Value.Name))
.OrderBy(item => item.Value);
只是 Select
和 OrderBy
;尽量不要 materialize(即 ToList()
、ToDictionary()
),尤其是 在 Linq 的中间。
无需使用 select
和 orderby
。你可以试试这个
SortedList<int, string> sortedList =
new SortedList<int, string>(ComboBoxValues.Employees2Name
.ToDictionary(i => i.Key, i => i.Value.Name));
字典 class 已经实现了 IEnumerable>,这是您的 OrderBy() 的有效输入,然后应用 ToList>() 似乎完全没用。
此外,我认为 ToDictionary 调用是浪费内存和时间,因为您是从一个简单的项目集合构建字典(其主要目的是通过键保持项目的唯一性),然后按以下方式对它们进行排序值(而不是键),因此没有利用 Dictionary<,> class.
我会将您的代码重写为
ComboBoxValues.Employees2Name.Select(k => new KeyValuePair<int, string>(k.Key, k.Value.Name))
.OrderBy(kp => kp.Value)
此致,
丹尼尔.
@Servy 评论反映最佳答案。
你已经在
IEnumberable<KeyPairValue<int, Class>>
你只需要将名字放入字典然后按
排序
@Html.PopulateCombobox(ComboBoxValues.Employees2Name
.ToDictionary(k => k, v => v.Value.Name)
.OrderBy(v => v.Value)
所以我有一个字典 (Employees2Name) Of int => (some class) 我需要将其转换为 int => (some 属性 in class)
我的这个工作正常,这是个好消息。看起来我正在做一个额外的步骤,有没有办法在 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)
字典的第二个似乎多余。
看来你只需要
ComboBoxValues.Employees2Name
.Select(k => new KeyValuePair<int, string>(k.Key, k.Value.Name))
.OrderBy(item => item.Value);
只是 Select
和 OrderBy
;尽量不要 materialize(即 ToList()
、ToDictionary()
),尤其是 在 Linq 的中间。
无需使用 select
和 orderby
。你可以试试这个
SortedList<int, string> sortedList =
new SortedList<int, string>(ComboBoxValues.Employees2Name
.ToDictionary(i => i.Key, i => i.Value.Name));
字典 class 已经实现了 IEnumerable>,这是您的 OrderBy() 的有效输入,然后应用 ToList>() 似乎完全没用。
此外,我认为 ToDictionary 调用是浪费内存和时间,因为您是从一个简单的项目集合构建字典(其主要目的是通过键保持项目的唯一性),然后按以下方式对它们进行排序值(而不是键),因此没有利用 Dictionary<,> class.
我会将您的代码重写为
ComboBoxValues.Employees2Name.Select(k => new KeyValuePair<int, string>(k.Key, k.Value.Name))
.OrderBy(kp => kp.Value)
此致, 丹尼尔.
@Servy 评论反映最佳答案。
你已经在
IEnumberable<KeyPairValue<int, Class>>
你只需要将名字放入字典然后按
@Html.PopulateCombobox(ComboBoxValues.Employees2Name
.ToDictionary(k => k, v => v.Value.Name)
.OrderBy(v => v.Value)