【发布时间】:2020-06-23 12:49:51
【问题描述】:
我有一种方法,可以将字典列表转换为 DataTable。我还需要根据数据创建具有数据类型的列。字典中的某些值确实包含 null。我想出了以下几点:
private static DataTable ToDataTable(List<Dictionary<string, object>> listOfDictionary)
{
var result = new DataTable();
if (listOfDictionary != null && !listOfDictionary.Any())
{
return result;
}
var maxKeyCount = listOfDictionary.Select(x => x.Keys.Count).Max();
var maxCountDictionary = listOfDictionary.Where(x => x.Keys.Count == maxKeyCount).FirstOrDefault();
foreach (var column in maxCountDictionary.Select(c => new DataColumn(c.Key, c.Value == null ? typeof(string) : c.Value.GetType())))
{
result.Columns.Add(column);
}
listOfDictionary.ForEach(r => result.Rows.Add(r.Select(c => c.Value).Cast<object>().ToArray()));
return result;
}
如果列表中有两个字典,一个字典包含三个键,另一个包含四个键(最大为四个),那么数据表将有四列,并且数据行对于额外的列将具有 null/empty。
这段代码在这一行给出错误:
listOfDictionary.ForEach(r => result.Rows.Add(r.Select(c => c.Value).Cast<object>().ToArray()));
用于尝试为额外的字典键添加 null/empty。
请提出建议。
【问题讨论】:
-
c.Value 给出了错误。所以试试:c =>(c == null)? null : c.Value
-
ok 让我试试上面的
-
@jdweng 或使用空条件
c => c?.Value -
如果 c 为 null,它将没有值并给出异常。