2013-04-05 3 views
3

У меня есть KeyValuePair, в котором value содержит общий список одного из моих классов.Сортировка ключа/пары на основе расчета

поэтому для каждого значения я вычисляю один столбец и на основе этого значения я показываю его в формате таблицы.

Но здесь моя проблема: для каждого списка значений она содержит одну строку с 0 в качестве значения столбца, которое я получаю путем вычисления.

поэтому я хочу, чтобы это значение было на верхнем месте. но сейчас это может быть в любом месте.

Итак, как я могу сортировать, исходя из этого расчета.?

Вот мой код:

@foreach (KeyValuePair<String, List<MyClass>> keyValuePair in aClient.ESelectionDictionary) 
{ 
    foreach (MyClass eData in keyValuePair.Value) 
    { 
     string weight; 
     ............ 
     //Here comes some calculations 
     ............ 
     if (weight == 0d) 
     { 
      addclass = "class=hidden"; 
     } 
     else 
     { 
      addclass = "class=main"; 
     } 
    } 
} 

так что здесь для всех значений в eData, weight всегда 0d за исключением одного значения.

+0

Можете ли вы разместить свой код? –

+0

«для каждого значения я вычисляю один столбец» - какой столбец вы имеете в виду? – Dennis

+0

Мы должны сортировать, основываясь на расчете, судя по вашему сообщению, поэтому не могли бы вы вывести расчёт? – LukeHennerley

ответ

0

Создание нового словаря на основе предыдущего с перечнем заказанного пользовательской функции для расчета индекса столбца:

var reshuffled = aClient.ESelectionDictionary.ToDictionary(
    kvp => kvp.Key, 
    kvp => kvp.Value.OrderBy(CalculateColumnIndex) 
); 
0

Добавить промежуточную коллекцию, где вы будете иметь элементы в нужном порядке и реализовать две петли , сначала заполнит коллекцию в том порядке, в котором вы ищете, второй цикл отобразит таблицу:

var list = new List<MyClass>(keyValuePair.Value.Count); 

foreach (MyClass eData in keyValuePair.Value) 
{ 
    string weight; 
    ............ 
    //Here comes some calculations 
    ............ 
    if (weight == 0d) 
    { 
     list.Insert(0, eData); 
    } 
    else 
    { 
     list.Add(eData); 
    } 
} 

foreach (var eData in list) 
    // render eData into table