私はクラスオブジェクトを持っています(簡単にするために、クラス名はPerson
FirstName、Lastname、YearBornのフィールドを持っているとしましょう)
DB からデータを取得しましたが、配列に個別の年を入れたいのですが、これは LINQ を使用して行うことができますか?
List<person> Data
パラメータとしてメソッドに渡しDistinct
、データから年の配列を返したいと考えています。
どんな助けでも大歓迎です。
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();
Enumerable.Distinct メソッド (IEnumerable、IEqualityComparer)を使用する必要があります。ここでは、2 番目のパラメーターのように等価ルールを指定します。これにより、Distict
どのエンティティが等しいと見なされるかがわかるため、複数の場合はスキップされます。
ちょっと遅いけど:(
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;
}