2013-06-20 3 views
-3

Я пытаюсь сортировать запрос на основе индекса массива. См. Код ниже -Linq сортировка на основе индексированного элемента

query = data.Users; 
query = query.Where(u=>u.IsActive); 
query = query.OrderBy(u=>u.LName); 
query = query.OrderBy(u=>u.Phone[0]); 

все работает отлично, за исключением последней строки. Он показывает следующую ошибку -

NotSupportedException was unhandled. 
The expression [10007].Phone.get_Item(0) is not supported. 

Редактировать

Я попробовал -

query = query.OrderBy(u=>u.Phone.First()); 
query = query.OrderBy(u=>u.Phone.FirstOrDefault()); 

Телефон представляет собой массив строк.

+0

Вы ищете запрос = query.OrderBy (u => u.Phone); ? –

+0

Из-за необходимости сортировать на основе LName и телефона – Satpal

+0

Телефон является 'string'? –

ответ

0

Я думаю, вам нужно использовать ThenBy вместо второго OrderBy:

query = data.Users; 
query = query.Where(u=>u.IsActive); 
query = query.OrderBy(u=>u.LName); 
query = query.ThenBy(u=>u.Phone[0]); 

В противном случае вы просто реорганизовать весь массив, вместо упорядочения по 2-х полей, которые вы хотите.

+0

Извините, но вы ошиблись в ответе – user2484943

+1

@ user2484943 ответ от партнера не решит вашу проблему, но его определенно стоит упомянуть об этом. Если вы используете 'OrderBy' несколько раз, победит только последний. Если вы хотите отсортировать несколько значений, вам понадобится 'ThenBy' – Viper

Смежные вопросы