這樣的一個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 數量
uj5u.com熱心網友回復:
集合的Count為0時,也創建DataTable即可,如果有資料,向DataTable插入資料uj5u.com熱心網友回復:
集合的count為0時,//取出第一個物體的所有Propertie
Type entityType = entitys[0].GetType();
這句代碼就會出問題,“索引超出范圍"
uj5u.com熱心網友回復:
Type entityType = entities.GetType().GetGenericArguments()[0];這樣可以得到型別,無論entities有沒有資料
uj5u.com熱心網友回復:
應該使用 typeof(T)。
uj5u.com熱心網友回復:
沒有就new一個轉載請註明出處,本文鏈接:https://www.uj5u.com/net/126045.html
標籤:LINQ
