在這里,我通過 LINQ 對資料進行分組,DataTable但我試圖使用CopyToDataTable()我這邊不可用的資料。請查看我的代碼并告訴我我的代碼中遺漏了哪些CopyToDataTable()不可用的內容。
DataTable perioddata = ds.Tables[1].AsEnumerable()
.GroupBy(a => new
{
NewPeriod = a.Field<string?>("NewPeriod").ToString(),
PeriodOrder = a.Field<int>("PeriodOrder").ToString().ToInt32()
})
.Select(b => new PeriodDto
{
NewPeriod = b.Key.NewPeriod,
PeriodOrder = b.Key.PeriodOrder
}).CopyToDataTable();
uj5u.com熱心網友回復:
不使用通用擴展方法并將PeriodDto定義用作預期DataRow定義
DataTable perioddata = ds.Tables[1].AsEnumerable()
.GroupBy(a => new
{
NewPeriod = a.Field<string>("NewPeriod").ToString(),
PeriodOrder = a.Field<int>("PeriodOrder")
})
.Select(b => {
DataRow row = ds.Tables[1].NewRow();
row["NewPeriod"] = b.Key.NewPeriod;
row["PeriodOrder"] = b.Key.PeriodOrder;
return row;
}).CopyToDataTable();
uj5u.com熱心網友回復:
CopyToDataTable適用于DataRow這就是為什么你不能使用它。
DataTable CopyToDataTable<T>(this IEnumerable<T> source) where T : DataRow
既然你有IEnumerable<PeriodDto>,你可以創建自己的擴展方法,請參閱:Convert generic List/Enumerable to DataTable?
public static DataTable ToDataTable<T>(this IList<T> data)
{
PropertyDescriptorCollection props =
TypeDescriptor.GetProperties(typeof(T));
DataTable table = new DataTable();
for(int i = 0 ; i < props.Count ; i )
{
PropertyDescriptor prop = props[i];
table.Columns.Add(prop.Name, prop.PropertyType);
}
object[] values = new object[props.Count];
foreach (T item in data)
{
for (int i = 0; i < values.Length; i )
{
values[i] = props[i].GetValue(item);
}
table.Rows.Add(values);
}
return table;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/460846.html
上一篇:LINQ-如何從多個表中獲取資料
