0

我正在使用 Datatable Extensions 从 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,

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

但是,它可以在不更改类型的情况下正常工作,因为类型与属性类型相同

希望这可以帮助。您可以在此处阅读有关它的更多信息您还可以在此处 阅读有关IConvertible接口的更多信息

IConvertible接口有助于返回所需的值,因为对象没有实现 IConvertible,因此无法获取属性类型所需格式的值。

于 2012-12-28T09:29:10.810 回答