1

私はクラスオブジェクトを持っています(簡単にするために、クラス名はPersonFirstName、Lastname、YearBornのフィールドを持っているとしましょう)

DB からデータを取得しましたが、配列に個別の年を入れたいのですが、これは LINQ を使用して行うことができますか?

List<person> Dataパラメータとしてメソッドに渡しDistinct、データから年の配列を返したいと考えています。

どんな助けでも大歓迎です。

4

4 に答える 4

3

YearBorn が Datetime であると仮定する (?)

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

それがintの場合

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

null許容の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 メソッド (IEnumerable、IEqualityComparer)を使用する必要があります。ここでは、2 番目のパラメーターのように等価ルールを指定します。これにより、Distictどのエンティティが等しいと見なされるかがわかるため、複数の場合はスキップされます。

于 2013-07-17T11:18:45.717 に答える
1

Distinct標準クエリ演算子を使用します。

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

年が異なるすべての人の要素を取得したい場合は、 morelinqライブラリDistinctByから使用できます。

于 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 に答える