2013-07-17 101 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

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

相关问题