C# 使用LINQ分离DataTable的列值
假设我有一个从oracle数据库检索到的数据表dt,格式如下C# 使用LINQ分离DataTable的列值,c#,.net,linq,C#,.net,Linq,假设我有一个从oracle数据库检索到的数据表dt,格式如下 Eno | EHobbies | Esal ------------------------------------------------- 1 | Cricket,Tennis,Carroms | 500 2 | Cricket,Volley | 1000 //Datatable for abo
Eno | EHobbies | Esal
-------------------------------------------------
1 | Cricket,Tennis,Carroms | 500
2 | Cricket,Volley | 1000
//Datatable for above table
DataTable dt = new DataTable("EmployeeTable");
dt.Columns.Add("Eno", typeof(int));
dt.Columns.Add("EHobbies", typeof(string));
dt.Columns.Add("Esal", typeof(int));
dt.Rows.Add(1, "Cricket,Tennis,Carroms",500 );
dt.Rows.Add(2, "Cricket,Volley",1000);
我需要在DataTable dt上使用linq将其更改为以下格式。需要在逗号的帮助下通过保持其他列不变来分隔产品列
Eno | EHobbies | Esal
-------------------------------------
1 | Cricket | 500
1 | Tennis | 500
1 | Carroms | 500
2 | Cricket | 1000
2 | Volleyball | 1000
以下将起作用:
var newRows = dt.AsEnumerable()
.SelectMany(r => r.Field<string>("EHobbies")
.Split(',')
.Select(x => new { No = r.Field<int>("Eno"),
Hobbies = x,
Sal = r.Field<int>("Esal") }
)
);
DataTable result = new DataTable("EmployeeTable");
result.Columns.Add("Eno", typeof(int));
result.Columns.Add("EHobbies", typeof(string));
result.Columns.Add("Esal", typeof(int));
foreach(var newRow in newRows)
result.Rows.Add(newRow.No, newRow.Hobbies, newRow.Sal);
var newRows=dt.AsEnumerable()
.SelectMany(r=>r.Field(“EHobbies”)
.Split(“,”)
.Select(x=>new{No=r.Field(“Eno”),
爱好=x,
Sal=r.Field(“Esal”)}
)
);
DataTable结果=新的DataTable(“EmployeeTable”);
添加(“Eno”,typeof(int));
Add(“EHobbies”,typeof(string));
添加(“Esal”,typeof(int));
foreach(变量newRow in newRows)
result.Rows.Add(newRow.No,newRow.cabiods,newRow.Sal);
这也有助于:
DataTable newDt = new DataTable();
newDt.Columns.Add("Eno", typeof(int));
newDt.Columns.Add("EHobbies", typeof(string));
newDt.Columns.Add("Esal", typeof(int));
dt.AsEnumerable().ToList()
.ForEach(row => row["EHobbies"].ToString().Split(',').ToList()
.ForEach(item => newDt.Rows.Add(row["Eno"], item, row["Esal"])));
复制品-