2012-07-03 6 views
2

Можно создать дубликат:
Sorting an IList in C#Сортировка IList <Specific_Object_Type>

У меня есть IList<Keyword>, где ключевое слово является класс, содержащий заголовок (строка) и ключ (номер). Я хочу сортировать этот IList на основе ключа. Есть ли встроенная функциональность C#, которую я могу использовать?

+0

http://stackoverflow.com/questions/15486/sorting-an-ilist-in-c-sharp –

ответ

1

Вам нужно добавить: using System.Linq;

IList<keyword> sortedList = list.OrderBy(r => r.key).ToList(); 

Или вы можете попробовать:

IList<keyword> sortedList2 = (from r in list 
           orderby r.key 
           select r).ToList(); 
+0

Спасибо .. Мне не хватало использования. Теперь он работает отлично. –

+0

@ user1314871, добро пожаловать – Habib

0

UPDATE: Вы можете использовать OrderBy или OrderByDescending

var sort = list.OrderBy(x=> x.key); 

Или

var reverseSort = list.OrderByDescending(x=> x.key); 
+0

Там нет способа сортировки для IList. –

0

Вот ссылка на OrderByDescending, которые вы можете использовать, если у вас есть IList<YourType> или IEnumerable<YourType>.

var sorted = list.OrderByDescending(x=> x.key); 
+0

intelisense не показывает какой-либо метод orderby с IList. –

+0

@ user1314871 Вы используете .NET pre-3.5 или C# pre-3.0? Если да, см. Мой ответ. –

1

Вы можете использовать Linq Enumerable.OrderBy Method для этого:

var result = listOfObject.OrderBy(item => item.key).ToList(); 

для сортировки в порядке убывания использовать Enumerable.OrderByDescending Method ..

При использовании .NET Framework 3.0 и выше, а затем включить using System.Linq сверху и попробуйте использовать метод расширения.

+0

intelisense не показывает никакого метода orderby с IList –

+0

, вы должны добавить using System.Linq для intelisense –

0

Да с помощью метода расширения вы можете легко достигнуть этого

var sortelist = list.OrderBy(x=>x.PropertyName).ToList(); 

MSDN:

Сортировка данных по возрастанию:

Enumerable.OrderBy Method (IEnumerable, Func) - Сортирует элементы последовательности в порядке возрастания в соответствии с ключом.

Для сортировки По убыванию данных:

Enumerable.OrderByDescending Method (IEnumerable, Func) - Сортирует элементы последовательности в порядке убывания ключа.

0

Если у вас есть контроль над классом Keyword и считайте, что номер, упорядочивающий его «естественный» заказ, имеет Keyword интерфейс IComparable<Keyword>.

Если у вас нет контроля над классом или вы не хотите указывать этот порядок как естественный/по умолчанию, создайте класс, который реализует интерфейс IComparator<Keyword>.

EDIT: Или используйте LINQ для более простого и быстрого ответа. Застрял на Java слишком долго!

var sorted = keywords.OrderBy(k => k.Key); 
0
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web.UI.WebControls; 
using dynamic = System.Linq.Dynamic; 
using System.Linq.Expressions; 

namespace Lib.Extensions 
{ 
    public static class Utils 
    { 
     /// <summary> 
     /// Sorts by Model property with dynamic expression 
     /// </summary> 
     /// <param name="list"> </param> 
     /// <param name="propertyName"></param> 
     /// <param name="sortDirection"> </param> 
public static List<TObject> SortByModelProperty<TObject, TProperty>(this List<TObject> list, Expression<Func<TObject, TProperty>> property, SortDirection sortDirection) 
    { 
     string propertyName = GetPropertyName(property); 
     string exp1 = string.Format("model.{0}", propertyName); 

     var p1 = Expression.Parameter(typeof(TObject), "model"); 
     var e1 = System.Linq.Dynamic.DynamicExpression.ParseLambda(new[] { p1 }, null, exp1); 

     if (e1 != null) 
     { 
      if (sortDirection == SortDirection.Ascending) 
      { 
       var result = list.OrderBy((Func<TObject, TProperty>)e1.Compile()).ToList(); 
       return result; 
      } 
      else 
      { 
       var result = list.OrderByDescending((Func<TObject, TProperty>)e1.Compile()).ToList(); 
       return result; 
      } 
     } 
     return list; 
    } 

    private static string GetPropertyName<TObject, TProperty>(Expression<Func<TObject, TProperty>> property) 
    { 
     MemberExpression memberExpression = (MemberExpression)property.Body; 
     PropertyInfo propertyInfo = (PropertyInfo)memberExpression.Member; 

     return propertyInfo.Name; 
    } 

    } 
} 

Вы должны добавить System.Linq.Dynamic.You может найти его NuGet менеджера пакетов. Я думаю, что этот метод расширения поможет вам.

+0

Слишком сложно ... –

+0

Это очень простое использование. Пример yourlist.SortByModelProperty (x => x.PropertyName, SortDirection.Ascending) –

0

Попробуйте это:

var sorted = from c in list orderby c.Key select c; 
Смежные вопросы