0

DatatableExtensionsを使用してDatatableからListに変換しています。ここで、通常のListプロパティに行を追加しようとすると、正常に機能します。しかし、リスト内のリストを使用すると、問題が発生します。プロパティに値を設定できません。

 private static T CreateItemFromRow<T>(DataRow row, IList<PropertyInfo> properties) where T : new()
    {
        T item = new T();
        foreach (var property in properties)
        {

            if (property.Name.Equals("ProductSpec"))
            {
                Type t = property.GetType();
                //  i am getting error when i am trying to do this

                property.SetValue(item, ProductSpecIteration(property, row), null);
            }

            if (row.Table.Columns.Contains(property.Name))
            {                   
                property.SetValue(item, row[property.Name] == DBNull.Value?"":row[property.Name], null);
            }

        }
        return item;
    }


 private static ProductSpec ProductSpecIteration(PropertyInfo property, DataRow row)
    {            
        ProductSpec lstProductSpec = new ProductSpec();
        lstProductSpec.product_specs_id = Convert.ToInt64(row["product_specs_id"]);            
        return lstProductSpec;
    }

私はこれを一般的に行うことはできません。しかし、私でさえこの拡張機能にこれを追加することはできませんか?誰かがこの状況から私を助けることができますか

4

1 に答える 1

1

直接設定できないDataRow.Item[string]プロパティから返されたオブジェクトを変換しようとしています。

string value = row[property.Name] == DBNull.Value?"":row[property.Name].ToString();
property.SetValue(item, Convert.ChangeType(value, property.PropertyType), null);

ProductSpec uが使用できる場合、

  ProductSpec spec = ProductSpecIteration(property, row);
  property.SetValue(item, Convert.ChangeType(spec , property.PropertyType), null);

ただし、タイプはプロパティタイプと同じであるため、タイプを変更しなくても正常に機能します。

お役に立てれば。ここでそれについてもっと読むことができますここでIConvertibleInterface についてもっと読むこともできます

オブジェクトはIConvertibleを実装しておらず、プロパティタイプの必要な形式で値を取得できないため、IConvertibleインターフェイスは必要な値を返すのに役立ちます。

于 2012-12-28T09:29:10.810 に答える