У меня есть запрос в 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);