2014-04-11 122 views
0

我有一類結構如下: -獲得單獨的類別名稱從

public class Gallery 
{ 
     private string _category; 
      public string Category 
       { 
        get 
        { 
         return _category; 
        } 
        set 
        { 
         _category = value; 
        } 
       } 
     } 

我創建了一個列表對象是這樣的: - List<Gallery> GalleryList = new List<Gallery>(); 我加入的項目從SharePoint列表此列表對象。現在我需要這個列表對象中不同的類別名稱。我試過GalleryList.Distinct()。但我得到錯誤。如果有人知道答案,請幫助我。

+1

「我收到錯誤」並沒有給我們任何資料... –

+1

也請註明錯誤,以便其他人可能有更多的機會幫助你.. - 哇,你好主人喬恩.. –

+0

我試過'列表 DistinctCategory = GalleryList.Select(x => x.Category).Distinct()。ToList(); '它正在工作。謝謝。 – user3398794

回答

2

如果你只需要類別名稱,你需要從畫廊的名單投射到類別名稱的序列 - 和然後Distinct將工作:

// Variable name changed to match C# conventions 
List<Gallery> galleryList = ...; 
IEnumerable<string> distinctCategories = galleryList.Select(x => x.Category) 
                .Distinct(); 

如果你想要一個List<string>,只是在末尾添加對ToList的呼叫。

你需要一個using指令:

using System.Linq; 

爲好。

請注意,調用galleryList.Distinct()本身應該編譯(如果你有using指令),但它會爲你還沒有覆蓋Equals/GetHashCode只是由基準進行比較的對象。

如果你確實需要畫廊的集合,它們都具有不同的類別,那麼你可以使用MoreLINQ具有DistinctBy方法:

IEnumerable<Gallery> distinct = galleryList.DistinctBy(x => x.Category); 

在這種情況下,你需要一個using指令的MoreLinq命名空間。您還應該瞭解automatically implemented properties。您Gallery類可以更簡明地寫了很多爲:

public class Gallery 
{ 
    public string Category { get; set; } 
} 
+0

謝謝。這對我有用:) – user3398794

0
GalleryList.DistinctBy(x => x._category); 
+0

就其本身而言,不會編譯 - 'DistinctBy'不是LINQ的一部分。這是MoreLINQ的一部分,我敢說其他一些圖書館,但你沒有提到過那樣的東西。 –