我有类对象(为简单起见,我们说,类名是Person
与作为名字,姓氏字段,YearBorn)我可以使用LINQ检索数组字段的DISTINCT值吗?
我从DB我的数据,但现在想在一个数组有不同的年份(S) ,这可以使用LINQ来完成吗?
我将List<person> Data
作为参数传递给方法,并希望从数据返回一个年份为Distinct
的数组。
任何帮助将不胜感激。
我有类对象(为简单起见,我们说,类名是Person
与作为名字,姓氏字段,YearBorn)我可以使用LINQ检索数组字段的DISTINCT值吗?
我从DB我的数据,但现在想在一个数组有不同的年份(S) ,这可以使用LINQ来完成吗?
我将List<person> Data
作为参数传递给方法,并希望从数据返回一个年份为Distinct
的数组。
任何帮助将不胜感激。
假设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();
使用Distinct标准查询运算符(?):
var years = data.Select(p => p.Year).Distinct().ToArray();
如果您希望获取所有具有不同年份的人员元素,则可以使用morelinq库中的DistinctBy
。
Distinct不接受lambda作为参数,您必须先选择'Select'然后'Distinct'结果,如@拉斐尔的回答 – Rotem
你说得对,我用我自己的版本f或者太长。 – devdigital
有点晚,但:(
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;
}
如果他们不都是在同一天/每月出生的? –
您需要使用Enumerable.Distinct Method (IEnumerable, IEqualityComparer),其中相同的第二个参数指定平等规则,所以Distict
就会知道哪些实体视为相等,从而将跳过他们在一个以上的情况下,
如果它不可用,那么它不具有年份属性 –
@EricLippert对我很耻辱, –