Linq Group By语句用于包含列表的字典

本文关键字:列表 字典 包含 用于 Group By 语句 Linq | 更新日期: 2023-09-27 18:05:49

我有一个字典定义为

var dataDict = new Dictionary<String, List<RICData>>();

使用定义为

的RICData类
class RICData
{
        public string pubdate { get; set; }
        public string settle { get; set; }
        public int colorder { get; set; }
}

字典dataDict包含的数据如下-

"TEST1", ("12/01/2015, 100.1, 1", "12/02/2015, 200.1, 2", "12/03/2015, 300.4, 3")
"TEST2", ("12/01/2015, 150.1, 6", "12/02/2015, 200.1, 7")
"TEST3", ("12/01/2015, 250.1, 4", "12/02/2015, 400, 5")

我想做的是按照日期和颜色顺序对数据进行分组,并返回与

下面类似的内容
"12/01/2015", ("TEST1, 100.1, 1", "TEST3, 250.1, 4", "TEST2, 150.1, 6")
"12/02/2015", ("TEST1, 200.1, 2", "TEST3, 400, 5", "TEST2, 200.1, 7"
"12/03/2015", ("TEST1, 300.4, 3")

下面是一些示例代码。我想我不确定如何分组这些数据

var dataDict = new Dictionary<String, List<RICData>>();
            var rdList = new List<RICData>();
            rdList.Add(new RICData{pubdate = "12/01/2015", settle = "100.1", colorder = 1});
            rdList.Add(new RICData{pubdate = "12/02/2015", settle = "110.1", colorder = 2});
            rdList.Add(new RICData { pubdate = "12/03/2015", settle = "120.1", colorder = 3 });
            dataDict.Add("TEST1", rdList);
            var rdList1 = new List<RICData>();
            rdList1.Add(new RICData { pubdate = "12/01/2015", settle = "140.1", colorder = 6 });
            rdList1.Add(new RICData { pubdate = "12/02/2015", settle = "100.1", colorder = 7 });            
            dataDict.Add("TEST2", rdList1);
            var rdList2 = new List<RICData>();
            rdList2.Add(new RICData { pubdate = "12/01/2015", settle = "240.1", colorder = 4 });
            rdList2.Add(new RICData { pubdate = "12/02/2015", settle = "200.1", colorder = 5 });
            dataDict.Add("TEST3", rdList2);    
            //?????
            var resultGrp = dataDict.GroupBy(p => p.Value.Select(x => x.pubdate));

Linq Group By语句用于包含列表的字典

public class RICData
{
        public string PubDate { get; set; }
        public string Settle { get; set; }
        public int ColorDer { get; set; }
}
public class NewRICData
{
        public string Label { get; set; }
        public string Settle { get; set; }
        public int Colorder { get; set; }
}
var oldDict = new Dictionary<string, List<RICData>>();
var newDict = oldDict.SelectMany(pair => pair.Value.Select(data => new
    {
        PubDate = DateTime.Parse(data.PubDate), 
        NewRICData = new NewRICData
        {
            Label = pair.Key, 
            Settle = data.Settle, 
            ColorDer = data.ColorDer
        }
    }))
    .GroupBy(x => x.PubDate.Date)
    .ToDictionary(group => group.Key.ToString("d"), 
                  group => group.Select(x => x.NewRICData)
                                .OrderBy(x => x.ColorDer));