Вы можете создать одну подпрограмму, которая предоставляет имя и строку запроса и возвращает целочисленное значение.
Получив это, просто верните по порядку:
int QueryOrder(string query, string name)
{
if (name == query)
return -1;
if (name.Contains(query))
return 0;
return 1;
}
Затем выполните:
var results = userList.OrderBy(s => QueryOrder(query, s.Name));
Хорошая вещь в этом подходе заключается в том, что позже вы можете расширить процедуру, чтобы предоставить больше деталей, что позволит вам отсортировать, насколько «хорошо» совпадение вы получите.Например, «Пит» -> «Питер», вероятно, лучше подходит, чем «Пит» -> «Питер Смит», поэтому вы могли бы заставить свою логику возвращать другое значение для различных опций ...
Если вам нужно удалить совпадения «не по Питу», вы также можете исключить их с помощью предложения Where.