3

我正在使用实体框架,这是其中一张表的元数据的样子。

    [Column("pp_account")]
    public string Account { get; set; }
    [Column("pp_added")]
    public DateTime? AddDate { get; set; }
    [Column("pp_auser")]
    public string AddUpdateUserName { get; set; }
    [Column("pp_cfalt")]
    public string AlternateForwardingNumber { get; set; }

我对获取 Column 属性名称而不是公共名称感兴趣,即显示 pp_added 而不是“AddDate”。这是我到目前为止写的一个 foreach 循环,几乎可以让我到达那里

foreach(var field in _personal.GetType().GetProperties())
{
            sb.Append("\nName            : " +  field.Name + "\n");
            sb.Append("Type        : " + field.PropertyType.Name + "\n");
            sb.Append("Attributes:  " + field.Attributes + "\n");
            sb.Append("Value       : " + field.GetValue(_personal, null) + "\n");
}

这是返回的内容:

Name:  AddDate
Type:  Nullable'1
Attributes:  None
Value:  5/2/2014 12:00:00 AM

我想得到的是

Name:  pp_added
Type:  Date
Value:  5/2/2014 12:00:00 AM

我如何访问[Column("pp_added")]to getpp_added而不是 public Name

4

2 回答 2

10

这应该有效:

foreach(var field in _personal.GetType().GetProperties())
{
   sb.Append("\nName       : " +  field.GetCustomAttribute<ColumnAttribute>().Name + "\n");
   sb.Append("Type        : " + field.PropertyType.Name + "\n");
   sb.Append("Value       : " + field.GetValue(_personal, null) + "\n");
}

ColumnAttribute是在命名System.ComponentModel.DataAnnotations.Schema空间中。

于 2016-04-11T13:22:48.567 回答
3

除了亚历山大的回答,这将获得可空类型的基础类型:

sb.Append("Type        : " + (Nullable.GetUnderlyingType(field.PropertyType) ?? field.PropertyType).Name + "\n");

Nullable.GetUnderlyingType将返回基础类型,如果它是可空的(即它会返回DateTime,如果给定DateTime?),或者如果它不是可空的,则返回空。因此,??表达。

于 2016-04-11T13:24:43.260 回答