通過するデータがいくつかあり、文字列オブジェクトの辞書リストの型に基づいて dataTable を生成します。私が抱えている問題は、コードが Dictionary FirstOrDefault をチェックしてデータテーブルを構築することですが、これらの値のいずれかが null の場合、すぐに爆発します。
次のコードを取得して、特定のキーの場合、残りの辞書値を反復処理する方法はありますか?
タイプを単純に確認して文字列に設定しようとしましたが、その列に失敗する実際の値が含まれている場合(たとえば、文字列に設定されている場合のdateTime)。問題のすべての key.Key タイプの値をループして、セルのいずれかにタイプがあるかどうかを調べ、それらがすべて null の場合は文字列が機能するかどうかを調べたいと思います。
public DataTable(IEnumerable<Dictionary<string, object>> source)
{
if (source != null)
{
var firstItem = source.FirstOrDefault();
if (firstItem != null)
{
//foreach (var item in source)
//{
// var u = item.Values;
// var t = item.Keys;
//}
foreach (var key in firstItem)
{
if (key.Value == null) //check if value is null and try and find the next value for that key.Key that isn't
{
foreach (var item in source)
{
var kk = key.Key;
var ik = item.Keys;
}
//...some logic to try and find if the key.Key Value in question has any legitimate value other than null to set the DataType to
//set value to some type here to avoid things blowing up.
Columns.Add(new DataColumn() { ColumnName = key.Key, DataType = typeof(string) });
}
else
{
Columns.Add(new DataColumn() { ColumnName = key.Key, DataType = key.Value.GetType() });
}
}
foreach (var item in source)
{
var row = new DataRow();
foreach (var key in item)
{
row[key.Key] = key.Value;
}
Rows.Add(row);
}
}
}
}