Как я могу получить Linq в С# для возврата SortedList
с учетом IEnumerable
? Если я не могу, можно ли преобразовать IEnumerable
в SortedList
?
С# Linq return SortedList
Ответ 1
Самый простой способ - создать словарь с помощью 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 });
Ответ 2
Вам нужно будет использовать конструктор IDictionary
, поэтому используйте метод расширения ToDictionary
в вашем запросе linq, а затем используйте новый SortedList(dictionary);
например.
var list=new SortedList(query.ToDictionary(q=>q.KeyField,q=>q));
Ответ 3
Что-то вроде этого прекрасно работает
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 ) );