2016-10-14 29 views
0

考慮下面的簡單屬性恢復列表項,從列表項獨特性質

Class Data 
{ 
     public string AA { get; set; } 
     public int BB { get; set; } 
     public int CC { get; set; } 
     ... 
    } 

和數據項的列表

List<Data> Items = new List<Data>; 

其中有一些示例數據

"2002", 3 ,5 .. 
"2002", 3 ,5 .. 
"2006", 4 ,2 .. 
"2002", 3 ,5 .. 
"2018", 9 ,7 .. 
"2018", 5 ,5 .. 

我需要找到字符串AA的distint值,所以我可以使用下面的代碼

foreach(var itm = Items.Select(x => x.AA).Distinct())) 
    { 
     use itm ... 
    } 

這corectly返回ITM =字符串「2002」,「2006」和「2018」,但我還需要恢復一些剩餘的性質,即BB等,爲「歷歷選」項目,這也將是明顯相關到主要領域。

我試過用manys的方法來達到這個目的,但一直都不成功,所以如果有人能指出一個方法如何實現這一點,將不勝感激。

我試圖重新獲得物品的索引,返回基本物品,即返回 列表中的所有物品的數據。

實際上有成千上萬的數據項,我需要恢復鏈接到distint數據項的字段。

我目前有一個工作解決方案,我提取不同的項目,然後使用生成的列表搜索第一個匹配項目,然後恢復數據。它的作品,但它不是很elapter,因爲我必須處理額外的時間對列表。

注意,在這個解決方案沒有SQL選項,提供的數據是XML或JSON的解決方案必須是獨立的EXE

評論歡迎

感謝

+0

您是否嘗試過使用'詞典<字符串,列表>'這裏的關鍵是'AA'和值是所有數據的列表具有相同'AA'對象? – Enfyve

+0

從過去的經驗中,我發現一本字典在被要求收緊大量物品時非常緩慢。我練習可能有500,000個項目來處理,但這是一個思考的感謝。 –

回答

1

鮮明的只是一組由沒有任何聚集。你想要的是在AA上進行分組,然後聚合這些值,具體而言,您想要參加第一場比賽,可以這樣做。

Items.GroupBy(x => x.AA, x => x, (x,grp) => grp.First()) 
+0

因此,這似乎是一個更優雅的解決方案,我在長時間纏繞的代碼中做了什麼,我會給出一個嘗試後的結果 - 謝謝 –

0

創建另一個變量並通過該變量應該是適用於工作組。

var another_item = Items.GroupBy(x => x.AA).ToList(); 
foreach(var itm in another_item) 
{ 
    use itm ... 
}