C # Как отсортировать список объектов по любому свойству - PullRequest
0 голосов
/ 25 мая 2018
public class SortExample
{
  public int IntField {get; set;}

  public string StringField {get; set;}

  public DateTime DateField {get; set;}
}

Этот класс установлен как источник для просмотра списка, а параметр sortExpression, переданный в функцию ниже, представляет собой имя свойства с порядком сортировки 'IntField ASC' 'IntField DESC' 'StringField ASC' 'StringField DESC'

public void SortExampleMethod(string sortExpression)
{
   List<SortExample> list = new  List<SortExample>();
   list.OrderBy(sortExpression);
}

Единственный способ реализовать это - написать компаратор для каждого свойства, или что-то в LINQ позволяет легко это сделать?

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Чтобы сделать то, что вам нужно, вы можете использовать динамическую библиотеку запросов LINQ, которая позволяет передавать string в OrderBy.

, например: var result = list.OrderBy("intField asc");

Здесь полное руководство

https://weblogs.asp.net/scottgu/dynamic-linq-part-1-using-the-linq-dynamic-query-library

Другое решение заключается в том, чтобы метод принимал Expression class

public void sort(Expression<Func<TEntity, S>> orderByExpression, bool ascending)
{

List<SortExample> list = new  List<SortExample>();
if(ascending)
{
   list.OrderBy(orderByExpression);
}
else
   list.OrderByDescneding(orderByExpression);
}
0 голосов
/ 25 мая 2018

Что-то вроде:

list.OrderBy (x => x.property);

https://msdn.microsoft.com/en-us/library/bb534966.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...