从列表项的不同属性中恢复列表项

本文关键字:列表 恢复 属性 | 更新日期: 2023-09-27 18:13:01

给定以下简单属性

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的不同值,所以我可以使用下面的代码
   foreach(var itm = Items.Select(x => x.AA).Distinct()))
   {
       use itm ...
   }

正确返回itemm = string"2002","2006"answers"2018",但是我还需要恢复一些剩余的属性,即BB等"明确选择"项目,这也将明显与主字段相关。

我已经尝试了很多方法来实现这个目标,但都没有成功,所以如果有人能告诉我如何实现这个目标,我将不胜感激。

我已经尝试恢复索引的项目,返回基本项目,即数据的工作到目前为止返回列表中的所有项

在实践中,有成千上万的数据项,我需要恢复链接到不同数据项的字段。

我目前有一个工作的解决方案,我提取不同的项目,然后使用生成的列表来搜索第一个匹配的项目,然后恢复数据。它可以工作,但不是很优雅,因为我必须根据列表处理额外的时间。

注意在这个解决方案中没有SQL选项,提供的数据是XML或JSON解决方案必须是独立的exe

欢迎评论

谢谢

从列表项的不同属性中恢复列表项

Distinct只是一个组by,没有任何聚合。您想要的是对AA进行分组,然后汇总这些值,特别是您想要获得第一个匹配,可以这样做。

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

创建另一个变量并在该变量上应用group by。

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