我可以使用LINQ检索数组字段的DISTINCT值吗?

时间:2013-07-17 11:13:41

标签: c# linq

我有类对象(为简单起见,比方说,类名是Person,字段为FirstName,Lastname,YearBorn)

我从数据库获取数据,但现在希望在数组中有不同的年份,这可以使用LINQ完成吗?

我将List<person> Data作为参数传递给方法,并希望从数据中返回Distinct年的数组。

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分: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();

答案 1 :(得分:2)

您需要使用Enumerable.Distinct Method (IEnumerable, IEqualityComparer),其中第二个参数指定了相等规则,因此Distict将知道哪些实体被认为是相等的,所以如果多于一个实体将跳过它们。

答案 2 :(得分:1)

使用Distinct标准查询运算符:

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

如果您希望获得具有不同年份的所有人员元素,则可以使用morelinq库中的DistinctBy

答案 3 :(得分: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;
    }