Вопрос по .net, linq, sorting, c# – Сортировка коллекции по нескольким полям

3

Мне нужно отсортировать коллекцию. Например, у меня есть

Austin 12/3/2012   
Sam 100 12/3/2012   
Sam 200 14/3/2012   
Bubly 300 12/3/2012   
Bubly 300 15/3/2012  
ram 100 13/3/2012 

Теперь, если порядок сортировки - Name, datetime, тогда вывод должен быть

Austin 12/3/2012    
Bubly 12/3/2012   
Bubly 15/3/2012   
ram 13/3/2012    
sam 12/3/2012    
sam 14/3/2012  

Если у него порядок сортировки: Datetime, Name, то он должен быть

12/3/2012 austin
12/3/2012 bubly
12/3/2012 sam
13/3/2012 ram
14/3/2012 sam
15/3/2012 bubly 

Соответственно для других предметов. Как мне это сделать ? Как мне взять порядок столбцов для сортировки.

Вы'здесь не очень понятно, как вы указываете, что вы хотите заказать? Вы пытаетесь передать функцию делегата для управления порядком? Paul Aldred-Bann
OrderBy(...).ThenBy(...) I4V
Похоже, вы хотите заказать его динамически (зависит от некоторых параметров)? ? King King

Ваш Ответ

4   ответа
4

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

yourList.OrderBy(o => o.DateTime).ThenBy(o => o.Number);
4

Сначала вы создаете две функции:

var SortByDate=(p=>p.Date);
var SortByName=(p=>p.Name);

Тогда у вас есть, например, список, содержащий два

var SortDimensions=new List<object>({SortByDate,SortByName});
<p>Тогда вы, если вы хотите отсортировать по первому дате, а затем имя, которое вы делаете:</p><pre><code>myList.OrderBy(SortDimensions[0]).ThenBy(SortDimensions[1]);
</code></pre><p>Теперь вот сложная часть: если вы хотите сначала отсортировать по имени, а затем по дате, просто измените порядок функций в SortDimensionsList:</p><pre><code>SortDimensions.Remove(SortByName);
SortDimensions.Insert(0,SortByName);
</code></pre><p>Таким образом, один и тот же оператор OrderBy даст вам другой результат.</p><p>PS. По общему признанию, это довольно близко к псевдокоду, так как вам, возможно, придется использовать что-то кроме<code>List<object> для коллекции SortDimensions, чтобы избежать ошибок компилятора, но я неВ данный момент у меня нет доступа к IDE, но дух ответа остается прежним. Создайте коллекцию, сохраните в ней функции делегатов, а затем измените порядок в коллекции, чтобы получить разные измерения сортировки с использованием одного и того же универсального кода.<p></p></object></code></p></object>
Я понял, но я все еще не могу получить код Когда я определяю функцию var SortByDate = (p =>p.Date); , вар вообще не распознается, я делаю что-то не так ?? user1687824
Да, но он также будет повторяться столько же раз с использованием других подходов. Предложение LINQ совпадает с другими ответами. Boluc Papuccuoglu
если я возьму этот подход, будет ли коллекция зациклена столько раз, сколько мне нужно отсортировать поля / поля? user1687824
Итак, позвольте нам сказать, что у вас есть класс с именем MyClass, который имеет член Date (для простоты 'это строка) и элемент Name (также строка). Попробуйте написатьFunc SortByDate=(p=>p.Date); а такжеFunc SortByName=(p=>p.Name); а такжеList SortDimensions=new List(){SortByDate,SortByName}; Это компилируется? Boluc Papuccuoglu
0

Я хотел бы создать класс для хранения вашей информации

public class NameDate
{
    private string name;
    private DateTime date;
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
    public DateTime Date
    {
        get { return date; }
        set { date = value; }
    }
}

Я бы тогда заселилList держать ваши вещи. Когда это будет сделано, для сортировки предметов вы можете использовать LINQ

List<namedate> someList = new List<namedate>();
someList = GetNameDateList();
var orderedByNameList = someList.OrderBy(e => e.Name);
var orderedByDateTimeList = someList.OrderBy(e => e.Date);
</namedate></namedate>

Надеюсь, это поможет.

6

Вы можете использовать функцию LinqThenBy после использованияСортировать по выполнить дальнейшую сортировку.

listOfRecords.OrderBy(p => p.Name).ThenBy(p => p.Date)
Как определяется порядок столбцов? Какая логика стоит за этим? Sachin
Если это проблема, тогда просто напишите функцию-обертку, где вы можете передать порядок сортировки в качестве параметров. Andre Lombaard
@ user1687824, вы можете использовать "SortDimensions» список для достижения этого. Смотрите мой ответ ниже, но вам может понадобиться использовать другой тип для объекта SortDimensions, отличный от.List Boluc Papuccuoglu
Проблема здесь в том, что порядок столбцов не определен ?? иногда это может быть имя, затем дата, иногда это может быть дата, а затем имя ... так, как мне написать общее утверждение. user1687824

Похожие вопросы