1

我有类对象(为简单起见,假设类名的Person字段为 FirstName、Lastname、YearBorn)

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

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

任何帮助将不胜感激。

4

4 回答 4

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();
于 2013-07-17T11:14:55.800 回答
2

您需要使用Enumerable.Distinct Method (IEnumerable, IEqualityComparer),其中就像您指定相等规则的第二个参数一样,因此Distict将知道哪些实体被认为是相等的,因此在多个实体的情况下将跳过它们。

于 2013-07-17T11:18:45.717 回答
1

使用Distinct标准查询运算符:

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

如果您希望获取所有具有不同年份的人员元素,则可以使用DistinctBymorelinq

于 2013-07-17T11:15:04.113 回答
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;
    }
于 2013-07-17T11:18:07.260 回答