2016-10-14 19 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 ... 
}