2010-09-10 3 views
4
_db.InstellingAdressens 
    .Where(l => l.GEMEENTE.Contains(gem_query)) 
    .OrderBy(q => q.GEMEENTE) 
    .Select(q => q.GEMEENTE) 
    .Distinct(); 

это запрос. он возвращает List<string>, но строки вообще не заказываются. Почему OrderBy не имеют эффекта? и как это исправить?Запрос LINQ OrderBy не работает

ответ

9

Попробуйте положить OrderBy в конце вызова.

_db.InstellingAdressens. 
    Where(l => l.GEMEENTE.Contains(gem_query)). 
    Select(q=>q.GEMEENTE).Distinct(). 
    OrderBy(q=>q).ToList(); 
+0

это единственный правильный ответ :) – Stefanvds

1

Изменить порядок вызовов

_db.InstellingAdressens.Where(l => l.GEMEENTE.Contains(gem_query)).Select(q=>q.GEMEENTE).Distinct().OrderBy(q=>q.GEMEENTE).ToList(); 
+0

это неверно. вы не можете использовать orderby с q => q.gemeente после выбора. – Stefanvds

1

Попробуйте просто поставить OrderBy последний из запроса

_db.InstellingAdressens 
.Where(l => l.GEMEENTE.Contains(gem_query)) 
.Select(q=>q.GEMEENTE) 
.Distinct() 
.OrderBy(q=>q.GEMEENTE).ToList(); 
6

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

Типичная реализация будет использовать хеш-таблицу, которая не упорядочена тем, что вы обычно хотите, чтобы элементы упорядочивались, поэтому результат от отдельной операции является неупорядоченным.

Так же, как предложили другие, измените порядок ваших звонков, чтобы сделать заказ последним, и вы должны получить то, что хотите.

+0

спасибо за ваше объяснение ПОЧЕМУ. теперь было очень полезно и логично, почему это не работает. – Stefanvds

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