当linq语句不包含任何元素时,是否有一种方法可以循环遍历linq语句的下划线结果的属性?
我想创建一个数据表,并添加单个属性作为列,但似乎这只能在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语句不包含任何项。
我愿意接受任何建议。
谢谢。
我怀疑你在找它:
PropertyInfo[] queryInfo = typeof(T).GetProperties();
换句话说,从泛型类型参数中获取属性,而不是从该类型的特定实例中获取属性。