string.join / properties.select按显示名称而不是变量名称

时间:2013-07-26 20:11:24

标签: asp.net-mvc string entity-framework

我正在使用以下代码使用Entity Framework和MVC将表导出到csv:

string header = string.Join("\t", properties.Select(p => p.Name).ToArray());

有没有办法选择我在模型中设置的显示名称,例如显示“Hours”而不是“hrs”:

    [Display(Name = "Hours")]
    public float hrs { get; set; 

目前我只获取所有变量名称而不是我设置的diaplay名称。似乎应该有一个简单的解决方案,但谷歌没有太多的帮助。

1 个答案:

答案 0 :(得分:0)

如果要从属性(例如hrs)获取属性,请使用以下方法

    public static string GetDisplayName(Type type, string prpName)
    {
        PropertyInfo[] props = type.GetProperties();
        foreach (PropertyInfo prop in props)
        {
            if(!prop.Name.Equals(prpName))
            {
                continue;
            }

            object[] attrs = prop.GetCustomAttributes(true);
            foreach (object attr in attrs)
            {
                if (attr is Display)
                {
                    Display dAttr = (Display)attr;
                    return dAttr.Name;
                }
            }
        }

        return null;
    }

如果你想为所有这些获得它,你应该产生一个列表并解决它。

我会建议这样的事情:

    public static string[] GetDisplayNames(Type type)
    {
        PropertyInfo[] props = type.GetProperties();
        string[] dNames = new string[props.Length];
        for (int i = 0; i < dNames.Length; i++)
        {
            PropertyInfo prop = props[i];
            object[] attrs = prop.GetCustomAttributes(true);
            foreach (object attr in attrs)
            {
                if (attr is Display)
                {
                    Display dAttr = (Display)attr;
                    dNames[i] = dAttr.Name;
                    break;
                }
            }

            if (string.IsNullOrEmpty(dNames[i]))
            {
                dNames[i] = prop.Name;
            }
        }

        return dNames;
    }

请参阅: