1

私のDataTableには17列が含まれており、そのうち3列を取得しています。たとえば、これら 3 つの列を colA、colB、colC と見なします。私の要件は、結果は次の形式にする必要があることです

Dictionary<string, Dictionary<string,string>> ( Dictionary<colA,Dictionary<colB,colC>> )

LINQを使った方がいいです...!

Dictionary<string, Dictionary<string, string>> roles = TA_Roles.GetRoleByUsername(Username)
    .Select(col => new { col.RoleID, col.Rolecode, col.Rolename }) 
    //Please continue from here..!
4

3 に答える 3

5

colA が一意の場合、これは機能するはずです。

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()));
于 2012-09-29T18:23:25.177 に答える
1

col2/col3 の組み合わせが一意かどうかに応じて、2 つの解決策があります。

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)
    );

しかし、3 つの列のすべての組み合わせが一意である場合、すべてが無意味になります。ただし、2 つの辞書を作成することは理にかなっています。

Dictionary<string, Role> rolesByID = source.ToDictionary(r => r.RoleID);
Dictionary<string, Role> rolesByCode = source.ToDictionary(r => r.Rolecode);
于 2012-09-29T17:31:21.637 に答える
1

データが一意であることを保証しないため、ここでDictionary<string, Dictionary<string, string>>はあまり修正されていないようです。代わりに使用できますcol1List<Tuple<string, string, string>>

 var result = table.AsEnumerable().Select(row => 
                Tuple.Create<string, string, string>(row.Field<string>("col1"), 
                                                     row.Field<string>("col2"), 
                                                     row.Field<string>("col3")));
于 2012-09-29T16:17:13.960 に答える