2015-09-26 163 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; } 
    } 
} 

我有3个公有属性,ID,姓名和市一个Employee类。 我创建了一个雇员列表,里面有一些虚拟数据。

现在我想要用户输入一个搜索字符串,它实际上是一个名称,如果列表包含该名称,它应根据搜索字符串对列表进行排序。

例如:如果用户输入名称为'John',那么修改后的列表应该显示John作为第一项,等等。

我写的代码行为异常。

图像被附加: enter image description here

+0

你能澄清“等”部分?如果用户输入“John”,你是否只想显示“John”?任何以“John”开头的东西?或者先放置“John”,然后在列表中自然显示所有其他名称? –

+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

我的坏,对不起@Backs,我看到你只是给OP一些建议。看起来像你最初所说的那样,'ThenBy'语句只是可选的。考虑到OP提供的数据,你实际上可以将'ThenBy'离开并且它应该很好地排序。 –

+0

感谢Backs和格兰特温尼,这个解决方案的工作原理,我错过了我的LINQ查询中的降序部分,因此它不工作。 – Anurag