Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ分离DataTable的列值_C#_.net_Linq - Fatal编程技术网

C# 使用LINQ分离DataTable的列值

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

假设我有一个从oracle数据库检索到的数据表dt,格式如下

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"])));
复制品-