如何在C#中使Linq返回SortedList
给定IEnumerable
?如果我不能,是否可以将IEnumerable
转换为SortedList
?
答案 0 :(得分:18)
最简单的方法可能是使用ToDictionary
创建字典,然后调用SortedList<TKey, TValue>(dictionary)
构造函数。或者,添加您自己的扩展方法:
public static SortedList<TKey, TValue> ToSortedList<TSource, TKey, TValue>
(this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector,
Func<TSource, TValue> valueSelector)
{
// Argument checks elided
SortedList<TKey, TValue> ret = new SortedList<TKey, TValue>();
foreach (var item in source)
{
// Will throw if the key already exists
ret.Add(keySelector(item), valueSelector(item));
}
return ret;
}
这将允许您创建具有匿名类型的SortedList
作为值:
var list = people.ToSortedList(p => p.Name,
p => new { p.Name, p.Age });
答案 1 :(得分:4)
您需要使用IDictionary
构造函数,因此请在linq查询中使用ToDictionary
扩展名方法,然后使用新的SortedList(dictionary);
e.g。
var list=new SortedList(query.ToDictionary(q=>q.KeyField,q=>q));
答案 2 :(得分:0)
这样的东西很好用
List<MyEntity> list = DataSource.GetList<MyEntity>(); // whatever data you need to get
SortedList<string, string> retList = new SortedList<string, string> ();
list.ForEach ( item => retList.Add ( item.IdField, item.Description ) );