C # Linq Custom Sort

У меня есть запрос в linqtosql, который возвращает LabelNumber:

var q = from list in db.Lists
        select list.LabelNumber;

var q затем становится ] IEnumerable с такими элементами:

{"1","2","2.A","2.B","3","3.A","3.B"}

Я в основном хочу упорядочить элементы, как они отображаются выше, но я не могу использовать OrderBy (x => x.LabelNumber) потому что «10» будет помещено после «1» и перед «2» .

Я предполагаю, что мне нужно написать собственную функцию компаратора, но как мне сделать это с помощью linq?

Изменить: Я думаю, что все приведенные ниже ответы будут работать, но ко всем ответам необходимо добавить одно предостережение.

Если вы используете Linq2SQL, вы не можете использовать индексы массива в запросе. Чтобы преодолеть это, у вас должно быть два запроса. Тот, который читает из SQL. Второй выполняет упорядочивание:

var q = from list in db.Lists
            select list.LabelNumber;

var q2 = q.AsEnumerable()
          .OrderBy(x => int.Parse(x.LabelNumber.Split('.')[0]))
          .ThenBy(x => x.Number
                        .Contains(".") ? 
                              x.LabelNumber.Split('.')[1].ToString() 
                              : 
                              string.Empty);
6
задан Shawn 3 October 2010 в 05:56
поделиться