2015-09-26 2 views
1

Я пытаюсь сортировать список на основе строки поиска. Но, похоже, проблема. Ниже приведен код:Сортировка списка с помощью строки поиска

namespace ListDemo 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Employee e1 = new Employee {ID=1,Name="John",City="London" }; 
      Employee e2 = new Employee { ID = 2, Name = "Mary", City = "NY" }; 
      Employee e3 = new Employee { ID = 3, Name = "Dave", City = "Sydney" }; 
      Employee e4 = new Employee { ID = 4, Name = "Kate", City = "Chicago" }; 
      Employee e5 = new Employee { ID = 5, Name = "Sheela", City = "Delhi" }; 
      List<Employee> listEmployee = new List<Employee>(); 
      listEmployee.Add(e1); 
      listEmployee.Add(e2); 
      listEmployee.Add(e3); 
      listEmployee.Add(e4); 
      listEmployee.Add(e5); 

      Console.WriteLine("Enter the name via which you wana sort?"); 
      string searchString = Console.ReadLine(); 
      Console.WriteLine("####################Sorted List Starts##############"); 
      var items = from element in listEmployee 
         orderby element.Name.Equals(searchString) 
         select element; 
      foreach (var i in items) 
      { 
       Console.WriteLine(i.Name); 
      } 
      Console.ReadLine(); 
     } 
    } 

    class Employee 
    { 
     public int ID { get; set; } 
     public string Name { get; set; } 
     public string City { get; set; } 
    } 
} 

У меня есть класс Employee с 3 открытых свойств, ID, имя и город. Я создал список сотрудников с некоторыми фиктивными данными.

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

Для примера: если пользователь ввел имя как «Джон», тогда в пересмотренном списке должен отображаться Джон как первый элемент и т. Д.

Код, который я написал, ведет себя ненормально.

Изображение прилагается: enter image description here

+0

Можете ли вы пояснить раздел «и так далее»? Если пользователь вводит «Джон», вы хотите отобразить только «Джон»? Что-нибудь, начиная с «Джона»? Или просто поместите «Джон» первым, а затем отобразите все другие имена, поскольку они происходят естественным образом в списке? –

+0

Сначала поместите Джона, а затем отобразите все остальные элементы, поскольку они встречаются естественным образом в списке. – Anurag

+0

Обратите внимание, что при сортировке считается, что 'false' считается меньше, чем' true'. – juharr

ответ

4

Во-первых, сортировать по равных в порядке убывания (это означает, что она будет firt в результате), и другие сортировать по ID, чтобы сохранить первоначальный порядок (или, вы можете использовать любое другое имущество для заказа):

var items = listEmployee 
    .OrderByDescending(e => e.Name.Equals(searchString)) 
    .ThenBy(e => e.ID).ToArray(); 
+0

@GrantWinney, может быть, это лучше, спасибо – Backs

+1

Мой плохой, извините @ Баки, я вижу, вы просто давали ОП некоторые советы. Похоже, как вы сказали, инструкция 'ThenBy' была просто необязательной. Вы можете оставить 'ThenBy', и он должен сортироваться просто отлично, учитывая данные, предоставленные OP. –

+0

Thanks Backs and Grant Winney, это решение работает, я пропустил нисходящую часть в моем запросе LINQ и, следовательно, он не работал. – Anurag

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