C#如何处理分组数据

Jundee 发布于 05/17 11:00
阅读 462
收藏 0

开源之夏第三届火热来袭,高校学生参与赢万元奖金!>>>

 

这部分数据,我想在C#中用Dictionary<string, Dictionary<string, decimal>>来封装,要怎么做呢?

Dictionary<ContractId, Dictionary<DictionaryId, Amount>>

加载中
1
Jundee
Jundee
Dictionary> dictionary=contractBillItemVOs.GroupBy(e => e.ContractId).ToDictionary(g => g.Key, g => g.ToDictionary(b => b.DictionaryId, b => b.Amount));

搞掂。

0
ArchitectureMaster
ArchitectureMaster

楼上明显写错了。你这里groupby虽然分组,但是请注意value是一个字典。从数据库里取出应该是一个List,即List<Dictionary<string,object>>至少是这样的列表才能装下题主贴出的数据表。

如果是这样的List进行GroupBy操作。GroupBy是两个参数,第一个参数是需要分组的列。

如题是按ContractID分组。但是第二个参数是分组后如何组装一个新的数据类型。而题主的需求是Dictionary<string,Dictionary<string,decimal>>而这个需要写入第二个参数:

(groupName, group) =>
                {
                    return new KeyValuePair<string, Dictionary<string, decimal>>(groupName,
                        group.GroupBy(g => $"{g["DictionaryId"]}", (g, gs) =>
                           {
                               decimal.TryParse($"{gs.FirstOrDefault().FirstOrDefault(gg => "group".Equals(gg.Key)).Value}"
                                   , out var value);
                               return new KeyValuePair<string, decimal>(g, value);
                           }
                        ).ToDictionary(k => k.Key, v => v.Value));
                }

还要注意DictionaryId可能有重复的问题,因为你的DictionaryId没有主键或唯一约束的明显标识,所以需要对DictionaryId再次分组去重,下面是完整的代码,并没有楼上那麽的简单!

 List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();
                //list = GetDBData();
                //Dictionary<ContractId, Dictionary<DictionaryId, Amount>>
                var resultData = list.GroupBy(t => $"{t["ContractId"]}", (groupName, group) =>
                {
                    return new KeyValuePair<string, Dictionary<string, decimal>>(groupName,
                        group.GroupBy(g => $"{g["DictionaryId"]}", (g, gs) =>
                           {
                               decimal.TryParse($"{gs.FirstOrDefault().FirstOrDefault(gg => "group".Equals(gg.Key)).Value}"
                                   , out var value);
                               return new KeyValuePair<string, decimal>(g, value);
                           }
                        ).ToDictionary(k => k.Key, v => v.Value));
                }).ToDictionary(k => k.Key, v => v.Value);

可以看下完整的代码截图:

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部
返回顶部
顶部