首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataTable到Dictionary<string、Dictionary<string、string>>

DataTable到Dictionary<string、Dictionary<string、string>>
EN

Stack Overflow用户
提问于 2012-09-30 00:12:46
回答 3查看 9.1K关注 0票数 1

我的DataTable包含17列,其中我检索了3列。例如,我们认为这3列是colA、colB、colC。我的要求是,结果的格式应该是

代码语言:javascript
复制
Dictionary<string, Dictionary<string,string>> ( Dictionary<colA,Dictionary<colB,colC>> )

最好使用LINQ...!

代码语言:javascript
复制
Dictionary<string, Dictionary<string, string>> roles = TA_Roles.GetRoleByUsername(Username)
    .Select(col => new { col.RoleID, col.Rolecode, col.Rolename }) 
    //Please continue from here..!
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-30 02:23:25

如果colA是唯一的,这应该是有效的:

代码语言:javascript
复制
Dictionary<string, Dictionary<string, string>> result = table.AsEnumerable().ToDictionary(row => row["colA"].ToString(),
                                                                                          row => new string[] { "colB", "colC" }.ToDictionary(col => col, col => row[col].ToString()));
票数 5
EN

Stack Overflow用户

发布于 2012-09-30 00:17:14

因为col1不能确保数据的唯一性,所以在这里Dictionary<string, Dictionary<string, string>>似乎不是很正确,您可以使用List<Tuple<string, string, string>>

代码语言:javascript
复制
 var result = table.AsEnumerable().Select(row => 
                Tuple.Create<string, string, string>(row.Field<string>("col1"), 
                                                     row.Field<string>("col2"), 
                                                     row.Field<string>("col3")));
票数 1
EN

Stack Overflow用户

发布于 2012-09-30 01:31:22

我有两个解决方案,取决于col2/col3组合是否唯一

代码语言:javascript
复制
class Role
{
    public string RoleID { get; set; }
    public string Rolecode { get; set; }
    public string Rolename { get; set; }
}

IEnumerable<Role> source = ...;

Dictionary<string, Dictionary<string, List<string>>> result = source
    .GroupBy(r => r.RoleID)
    .ToDictionary(g => g.Key,
         g => g.GroupBy(r2 => r2.Rolecode)
        .ToDictionary(g2 => g2.Key,
            g2 => g2.Select(r3 => r3.Rolename).ToList())
    );

// Rolecode unique
Dictionary<string, Dictionary<string, string>> result2 = source
    .GroupBy(r => r.RoleID)
    .ToDictionary(g => g.Key,
        g => g.ToDictionary(r2 => r2.Rolecode, r2 => r2.Rolename)
    );

但是,如果这三列的所有组合都是唯一的,那么整个过程就没有意义了。但是,创建两个字典是有意义的

代码语言:javascript
复制
Dictionary<string, Role> rolesByID = source.ToDictionary(r => r.RoleID);
Dictionary<string, Role> rolesByCode = source.ToDictionary(r => r.Rolecode);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12654285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档