2014-02-21 72 views
0

我想通過特定的crtieria命令某個類的元素。列表中具有共同特徵的組元素

例如,如果我有這個類:

public class Contact { 

public string FirstName { get; set; } 
public string LastName{ get; set; } 


} 

和這個類的一個列表:

 List<Contact> ContactList = new List<Contact> 
     { 

      new Contact{ 

      FirstName = "John" , 
      LastName = "Smith" 
      } , 


      new Contact{ 
      FirstName = "Andrew" , 
       LastName = "Wallace" 

      } , 
      new Contact{ 
      FirstName = "Andrew" , 
       LastName = "Smith" 

      } , new Contact{ 

      FirstName = "John" , 
      LastName = "Wallace" 
      } , 






     }; 

我如何使用LINQ爲了我的ContactList讓那麼它創建兩個列表一個聯繫人的名字是約翰和他的名字是安德魯?

這個清單很小,但如果我有一個巨大的清單,我不知道清單裏面是什麼,我該如何訂購它的FirstName特性?

回答

1
var result =ContactList.GroupBy(c => c.FirstName) 
      .Select(c => c.ToList()) 
      .ToList() 

這會給你一個List<List<Contact>>其中包含兩個lists.First一個包含約翰和第二個包含Andrews.Here是輸出:

enter image description here

更新:

根據您的評論可以使用字典

var dict = ContactList.GroupBy(c => c.FirstName) 
      .Select(c => c.ToList()) 
      .ToDictionary(x => x.First().FirstName, x => x); 

在此之後,你可以得到約翰與名單:

dict["John"] 

給你一個列表,其中包含所有約翰的

+0

那麼var的結果會是一個列表的列表?列表<列表>? – user2505650

+0

@ user2505650 yes.just在Select.I更新我的答案後使用'ToList' –

+0

是否可以更改「var」變量中列表的名稱?例如,如果我想將這個列表中的每個名稱都作爲FirstName的字符串的名稱? – user2505650

0

此列表很小,但是如果我有一個巨大的名單,我不知道是什麼是在列表中,我怎麼能按照FirstName的特徵來排序呢?

對於以名字爲基礎的訂購,您可以像Linq一樣訂購您的清單。

var listOrderedByName = ContactList.OrderBy(cl => cl.FirstName); 

,並在這個例子中,你最終會與您的聯繫人畢竟約翰接觸下令所有的安德魯接觸,然後再一個列表。這也可以用於一個巨大的列表。

我該如何使用Linq來訂購我的ContactList,以便它創建兩個列表之一,其名字是John,而其他名字是Andrew的Contacts?

如果你碰巧知道你的聯繫人列表的具體情況,你只想要一個列表與約翰和一個列表與安德魯斯,你可以這樣做與Linq這樣做。

var listWithJohnContactsOnly = ContactList.Where(cl => cl.FirstName == "John"); 
var listWithAndrewContactsOnly = ContactList.Where(cl => cl.FirstName == "Andrew"); 

這會給你兩個單獨的列表。一個只與第一個名字「John」聯繫,另一個與第一個名字「Andrew」聯繫。如果你希望對它們進行分組並最終列出一個列表(每個列表包含具有特定名字的聯繫人),那麼你可以像Selman22所建議的那樣使用GroupBy,並且你不必知道內部的具體細節你的清單。

相關問題