以下のユーティリティ機能(データテーブルへのリスト)では、どのようにリストのメンバーを除外できますか?いくつかのリストプロパティを除外してデータテーブルを作成する方法
などが、私は、属性を作成し、以下のユーティリティメソッドに
public class PointDataClone
{
public int DataId { get; set; }
public string UniqueKey { get; set; }
public int Count { get; set; }
public List<PointToPointData> PointToPointData { get; set; }
}
ユーティリティ機能、
public static DataTable ToDataTable<T>(this List<T> iList)
{
DataTable dataTable = new DataTable();
PropertyDescriptorCollection propertyDescriptorCollection = TypeDescriptor.GetProperties(typeof(T));
for (int i = 0; i < propertyDescriptorCollection.Count; i++)
{
PropertyDescriptor propertyDescriptor = propertyDescriptorCollection[i];
Type type = propertyDescriptor.PropertyType;
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
type = Nullable.GetUnderlyingType(type);
dataTable.Columns.Add(propertyDescriptor.Name, type);
}
object[] values = new object[propertyDescriptorCollection.Count];
foreach (T iListItem in iList)
{
for (int i = 0; i < values.Length; i++)
{
values[i] = propertyDescriptorCollection[i].GetValue(iListItem);
}
dataTable.Rows.Add(values);
}
return dataTable;
}
に役立ちます。 –
優れたアイデア、任意のサンプルコード – user584018
使用時:dataTable.Rows.Add(values);配列 'values'は、データテーブル内の列と同じ順序でなければなりません。値には、データテーブルに8列が含まれている場合、データテーブルの最初の5列を含めることができます。データテーブルの最後の3列はNULLで埋められます。フィールド型がNULLを許可しない場合、nullを使用してエラーを取得することがあります。 UniqueKeyおよび/またはPointToPointDataが配列の途中にある場合、コードに問題があります。私は通常、次のdataTable.Rows.Add(新しいオブジェクト[] {input1、input2、input5、input6、input10})を使用します。 – jdweng