我有類對象(爲簡單起見,我們說,類名是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對我很恥辱, –