获取空linq语句的属性

获取空linq语句的属性,linq,reflection,datatable,Linq,Reflection,Datatable,当linq语句不包含任何元素时,是否有一种方法可以循环使用linq语句的下划线结果的属性 我想创建一个DataTable并将各个属性添加为列,但似乎只有在linq语句包含项时才能这样做。请查看下面我的当前代码 private static void GetProperties<T>(IEnumerable<T> query) { DataTable dt = new DataTable(); PropertyInfo[] queryInfo = nul

当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);
    }
}
私有静态void GetProperties(IEnumerable查询)
{
DataTable dt=新的DataTable();
PropertyInfo[]queryInfo=null;
foreach(查询中的var项)
{
if(queryInfo==null)
{
queryInfo=item.GetType().GetProperties();
foreach(queryInfo中的var信息)
{
dt.Columns.Add(信息名称);
}
}
DataRow dr=dt.NewRow();
foreach(查询信息中的PropertyInfo pi)
{
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);
    }
}
私有静态void GetProperties(IEnumerable查询)
{
DataTable dt=新的DataTable();
PropertyInfo[]queryInfo=null;
queryInfo=query.FirstOrDefault().GetType().GetProperties();
foreach(queryInfo中的var信息)
{
dt.Columns.Add(信息名称);
}
foreach(查询中的var项)
{
DataRow dr=dt.NewRow();
foreach(查询信息中的PropertyInfo pi)
{
dr[pi.Name]=pi.GetValue(item,null)??DBNull.Value;
}
dt.Rows.Add(dr);
}
}
我总是希望DataTable包含列,即使linq语句不包含任何项

我愿意接受任何建议

谢谢。

我怀疑你在找它:

PropertyInfo[] queryInfo = typeof(T).GetProperties();
换句话说,从泛型类型参数而不是该类型的特定实例获取属性