我剛剛開始學習linq和lambda表達式,它們似乎很適合在複雜對象集合中查找重複項,但我得到了一些困惑並希望有人能幫助我重新走上開心編碼的道路。使用Linq或Lambda表達式檢查複雜對象中的重複內容
我對象的結構類似於list.list.uniqueCustomerIdentifier
我需要確保有在整個複雜的對象沒有重複uniqueCustomerIdentifier。如果有重複,我需要確定哪些重複,並返回重複列表。
我剛剛開始學習linq和lambda表達式,它們似乎很適合在複雜對象集合中查找重複項,但我得到了一些困惑並希望有人能幫助我重新走上開心編碼的道路。使用Linq或Lambda表達式檢查複雜對象中的重複內容
我對象的結構類似於list.list.uniqueCustomerIdentifier
我需要確保有在整個複雜的對象沒有重複uniqueCustomerIdentifier。如果有重複,我需要確定哪些重複,並返回重複列表。
var result =
myList
.SelectMany(x => x.InnerList)
.Select(y => y.uniqueCustomerIdentifier)
.GroupBy(id => id)
.Where(g => g.Skip(1).Any())
.Select(g => g.Key)
.ToList()
有一個linq運算符Distinct(),它允許您在只需要id的情況下過濾到一組不同的記錄。如果您已設置課程覆蓋等於您或有一個IEqualityComparer,您可以直接調用Distinct擴展方法來返回列表中的唯一結果。作爲額外的獎勵,您還可以使用聯合和交集方法在兩個列表之間進行合併或過濾。
另一種選擇是按id進行分組,然後選擇第一個元素。
var results = from item in list
group item by item.id into g
select g.First();
如果要拼合兩個列表層次結構,使用SelectMany
方法扁平化的IEnumerable<IEnumerable<T>>
到IEnumerable<T>
。
你可以跳過。選擇(Y => y.uniqueCustomerIdentifier),並使用.GroupBy(Y => y.uniqueCustomerIdentifier)來代替。 – Lucas 2008-11-01 05:02:55