2013-07-17 49 views
1

我有類對象(爲簡單起見,我們說,類名是Person與作爲名字,姓氏字段,YearBorn)我可以使用LINQ檢索數組字段的DISTINCT值嗎?

我從DB我的數據,但現在想在一個數組有不同的年份(S) ,這可以使用LINQ來完成嗎?

我將List<person> Data作爲參數傳遞給方法,並希望從數據返回一個年份爲Distinct的數組。

任何幫助將不勝感激。

回答

3

假設YearBorn是一個日期時間

var years = data 
       .Select(m => m.YearBorn.Year).Distinct(); 

,如果它是一個int

var years = data.Select(m => m.YearBorn).Distinct(); 

,如果它是一個可空DateTime的

var years = data 
      .Where(m => m.YearBorn.HasValue) 
      .Select(m => m.YearBorn.Value.Year).Distinct(); 
+0

如果它不可用,那麼它不具有年份屬性 –

+0

@EricLippert對我很恥辱, –

1

使用Distinct標準查詢運算符(?):

var years = data.Select(p => p.Year).Distinct().ToArray(); 

如果您希望獲取所有具有不同年份的人員元素,則可以使用morelinq庫中的DistinctBy

+1

Distinct不接受lambda作爲參數,您必須先選擇'Select'然後'Distinct'結果,如@拉斐爾的回答 – Rotem

+0

你說得對,我用我自己的版本f或者太長。 – devdigital

0

有點晚,但:(

 List<Person> persons = new List<Person>(); 
     persons.Add(new Person() { Forename = "Onam", Surname = "Chilwan", DOB = new DateTime(1984, 8, 23) }); 
     persons.Add(new Person() { Forename = "Onam", Surname = "Chilwan", DOB = new DateTime(1972, 8, 23) }); 
     persons.Add(new Person() { Forename = "Onam", Surname = "Chilwan", DOB = new DateTime(1988, 8, 23) }); 
     persons.Add(new Person() { Forename = "Onam", Surname = "Chilwan", DOB = new DateTime(1984, 8, 23) }); 

     int[] years = persons.Select(x => x.DOB.Year).Distinct().ToArray(); 

    public class Person 
    { 
     public string Forename; 
     public string Surname; 
     public DateTime DOB; 
    } 
+1

如果他們不都是在同一天/每月出生的? –

相關問題