С# Linq return SortedList

Как я могу получить Linq в С# для возврата SortedList с учетом IEnumerable? Если я не могу, можно ли преобразовать IEnumerable в 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 ) );