私は非常に奇妙な問題を抱えており、それを修正するためにどのような方法をとればよいかわかりません。
があり、IEnumerable<Dictionary<string,object>>
1 つまたは複数の を含めることができますIEnumerable<Dictionary<string,object>>
。
ここで、このディクショナリを DataTable にインポートする必要があります。IEnumberable<Dictionary<string,object>>
内部に子が 0 の場合、DataTable には、列名が文字列で、RowData がオブジェクト (この場合は文字列) の行が 1 つだけ含まれている必要があります。ただし、子が存在する場合、DataTable には、この子と同じ数の行と、親からのすべての行のその他の情報が含まれている必要があります。
たとえば、親 Dictionary には次の値があります。
文字列、オブジェクト --------------- 名前、マイク 姓、タイソン
IEnumerable ディクショナリの子には次のものがあります。
文字列、オブジェクト ---------------- [0] 子の名前、ジョン チャイルドエイジ、10 [1] 子の名前、トニー 子供の年齢、12
結果は次のようになります。
名前 姓 子の名前 子の年齢 -------------------------------------------- マイク・タイソン・ジョン 10 マイク・タイソン トニー 12
また、親 IEnumerable は多くの子 IEnumerable を持つことができますが、それらはすべて同じサイズになります。
これを解決する方法を知っている人はいますか?
static void Main(string[] args)
{
var child1 = new List<Dictionary<string, object>>();
var childOneDic = new Dictionary<string, object>
{
{ "ChildName", "John" },
{ "ChildAge", 10 }
};
child1.Add(childOneDic);
var child2 = new List<Dictionary<string, object>>();
var childTwoDic = new Dictionary<string, object>
{
{ "ChildName", "Tony" },
{ "ChildAge", 12 }
};
child2.Add(childTwoDic);
var parrent = new List<Dictionary<string, object>>();
var parrentDic = new Dictionary<string, object>
{
{ "Name", "Mike" },
{ "LastName", "Tyson" },
{ "child1", child1 },
{ "child2", child2 }
};
parrent.Add(parrentDic);
var table = new DataTable();
table.Columns.Add("Name");
table.Columns.Add("LastName");
table.Columns.Add("ChildName");
table.Columns.Add("ChildAge");
table = CreateTable(parrent, null, table);
}
static DataTable CreateTable(IEnumerable<Dictionary<string, object>> parrent,
DataRow row, DataTable table)
{
if (row == null)
{
row = table.NewRow();
}
foreach (var v in parrent)
{
foreach (var o in v)
{
if (o.Value.GetType().IsGenericType)
{
var dic = (IEnumerable<Dictionary<string, object>>) o.Value;
CreateTable(dic, row, table);
}
else
{
row[o.Key] = o.Value;
}
}
if (row.RowState == DataRowState.Added)
{
DataRow tempRow = table.NewRow();
tempRow.ItemArray = row.ItemArray;
table.Rows.Add(tempRow);
}
else
{
table.Rows.Add(row);
}
}
return table;
}