Результат поиска Linq по ближайшему совпадению

У меня есть ObservableCollection, которая содержит объект Person . В моем приложении есть функция поиска, и я хотел бы отображать наиболее релевантные результаты вверху. Что было бы наиболее эффективным способом сделать это? Мой текущий метод поиска просто вызывает метод содержит :

 var results = (from s in userList
               where s.Name.Contains(query)
               select s).ToList();

Он работает нормально, но результаты упорядочены в том же порядке, что и в userList . Если я ищу Пит , то сначала должно отображаться Пит , затем Питер , затем Питер Смит и т. Д. Что было бы наиболее эффективным способом сделать это? Мой текущий метод поиска просто вызывает метод содержит :

 var results = (from s in userList
               where s.Name.Contains(query)
               select s).ToList();

Он работает нормально, но результаты упорядочены в том же порядке, что и в userList . Если я ищу Пит , то сначала должно отображаться Пит , затем Питер , затем Питер Смит и т. Д. Что было бы наиболее эффективным способом сделать это? Мой текущий метод поиска просто вызывает метод содержит :

 var results = (from s in userList
               where s.Name.Contains(query)
               select s).ToList();

Он работает нормально, но результаты упорядочены в том же порядке, что и в userList . Если я ищу Пит , то сначала должно отображаться Пит , затем Питер , затем Питер Смит и т. Д. Он не должен быть слишком сложным, так как он будет иметь дело только с парой тысяч (максимум) результатов. Мой наивный подход заключался в том, чтобы сначала выполнить s.Name == query , отобразить этот элемент (если есть), затем выполнить s.Name.Contains (query) , удалить совпавший элемент и добавьте его к предыдущему совпавшему результату. Однако это кажется повсеместным, и есть ли лучший способ? Спасибо (ps - при поиске будет использоваться только имя, и я не могу использовать методы SQL)

6
задан Brap 13 October 2010 в 16:28
поделиться