请问一个linq的结果如果是一个空集的话,如何转换成一个空的datatable?

qg1977 2019-03-25 09:27:24
这样的一个linq

var query1= from t in dt_return_all_x1.AsEnumerable()
group t by new
{
t1 = t.Field<long>("生产批号ID"),t2 = t.Field<long>("产品ID")
}
into m
select new
{
生产批号ID = m.Key.t1,产品ID = m.Key.t2, 数量 = m.Sum(n => n.Field<decimal>("数量"))
};



我用如下方法转换成datatable,
DataTable dt = ToDataTable(query1.ToList());

       
public DataTable ToDataTable<T>(List<T> entitys)
{
////检查实体集合不能为空
if (entitys == null || entitys.Count < 1)
{
throw new Exception("需转换的集合为空");
}

//取出第一个实体的所有Propertie
Type entityType = entitys[0].GetType();
PropertyInfo[] entityProperties = entityType.GetProperties();

//生成DataTable的structure
DataTable dt = new DataTable();
for (int i = 0; i < entityProperties.Length; i++)
{
dt.Columns.Add(entityProperties[i].Name, entityProperties[i].PropertyType);
}

//将所有entity添加到DataTable中
foreach (object entity in entitys)
{
object[] entityValues = new object[entityProperties.Length];
for (int i = 0; i < entityProperties.Length; i++)
{
entityValues[i] = entityProperties[i].GetValue(entity, null);

}
dt.Rows.Add(entityValues);
}
return dt;
}


如果linq查询的不是空集有记录时,可以正常返回一个datatable,
可如果linq没有查询到结果,这时就抛出异常,

请问如何做到:当linq查询为一个空集时,可以生成一个只有字段,没有记录的空DataTable?
生产批号ID 产品ID 数量
...全文
519 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
shawn_yang 2021-05-10
  • 打赏
  • 举报
回复
if (null) return DateTable t=new DateTable();
叫我 Teacher 周 2019-08-16
  • 打赏
  • 举报
回复
没有就new一个
threenewbee 2019-03-26
  • 打赏
  • 举报
回复
Type entityType = entities.GetType().GetGenericArguments()[0];
这样可以得到类型,无论entities有没有数据
  • 打赏
  • 举报
回复
引用 2 楼 qg1977 的回复:
集合的count为0时, //取出第一个实体的所有Propertie Type entityType = entitys[0].GetType(); 这句代码就会出问题,“索引超出范围"
应该使用 typeof(T)。
qg1977 2019-03-25
  • 打赏
  • 举报
回复
集合的count为0时,
//取出第一个实体的所有Propertie
Type entityType = entitys[0].GetType();
这句代码就会出问题,“索引超出范围"
爱此清夜雨 2019-03-25
  • 打赏
  • 举报
回复
集合的Count为0时,也创建DataTable即可,如果有数据,向DataTable插入数据

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧