获取空linq语句的属性

时间:2014-08-20 07:30:52

标签: linq reflection datatable

当linq语句不包含任何元素时,有没有办法循环linq语句的下划线结果的属性?

我想创建一个DataTable并将各个属性添加为列,但似乎这只能在linq语句包含项目时完成。请参阅我目前的代码

private static void GetProperties<T>(IEnumerable<T> query) 
{
    DataTable dt = new DataTable();

    PropertyInfo[] queryInfo = null;

    foreach (var item in query)
    {
        if (queryInfo == null) 
        {
            queryInfo = item.GetType().GetProperties();
            foreach (var info in queryInfo)
            {
                dt.Columns.Add(info.Name);
            }
        }

        DataRow dr = dt.NewRow();

        foreach (PropertyInfo pi in queryInfo)
        {
            dr[pi.Name] = pi.GetValue(item, null) ?? DBNull.Value;
        }

        dt.Rows.Add(dr);
    }
}

所需代码或类似内容:

private static void GetProperties<T>(IEnumerable<T> query) 
{
    DataTable dt = new DataTable();

    PropertyInfo[] queryInfo = null;

    queryInfo = query.FirstOrDefault().GetType().GetProperties();

    foreach (var info in queryInfo)
    {
        dt.Columns.Add(info.Name);
    }

    foreach (var item in query)
    {
        DataRow dr = dt.NewRow();

        foreach (PropertyInfo pi in queryInfo)
        {
            dr[pi.Name] = pi.GetValue(item, null) ?? DBNull.Value;
        }

        dt.Rows.Add(dr);
    }
}

我总是希望DataTable包含列,即使linq语句不包含任何项目。

我愿意接受任何建议。

感谢。

1 个答案:

答案 0 :(得分:1)

怀疑你正在寻找它:

PropertyInfo[] queryInfo = typeof(T).GetProperties();

换句话说,从泛型类型参数中获取属性,而不是从该类型的特定实例获取属性。