2015-09-26 168 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