当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语句不包含任何项目。
我愿意接受任何建议。
感谢。
答案 0 :(得分:1)
我怀疑你正在寻找它:
PropertyInfo[] queryInfo = typeof(T).GetProperties();
换句话说,从泛型类型参数中获取属性,而不是从该类型的特定实例获取属性。