2016-08-02 5 views
-1

DataTableには、列名と行が含まれています。今私の必要条件として、私はnow.Hereコードをしているように列名を与えることなく行の値を取得する必要があります。上記のコードemployeesDataTableのrowDataのみにアクセスする

data = employees.AsEnumerable().Select(row=> new List<string> 
{ 
    row.Field<string>("EmployeeName"), 
    row.Field<string>("Company") 
}) 

DataTableあります。どのようにそれを行う。私はコードに示すようにdata変数に行の値を取得する必要があります。

更新

data = employees.AsEnumerable().Select(row=> new List<string> 
{ 
foreach(DataRow row in employees.Rows) 
    { 
     foreach(DataColumn col in employees.Columns) 
     data.Add(row[col.Ordinal].ToString()); 
    } 
}) 

答えて

1

あなたは、単に0は、クエリのようなものであれば、列EmployeeNameと1のインデックスは、カラム・カンパニー(の指標である

data = employees.AsEnumerable().Select(row=> new List<string> 
{ 
    row[0].ToString(), 
    row[1].ToString() 

}); 

この構文を使用することができますSELECT EmployeeName, Company from ....

しかし、私の意見では、これは実際には後退しています。列名を使用すると、列がデータベース表からロードされた順序でコードが保持されます。 foreachので

EDIT あなたはこのコードを使用することができ、すべての列のすべての行を超えると、すべての行のためにループしたい場合(この時点でのIEnumerableの拡張機能を使用してもあまり意味がありません)

foreach(DataRow row in employees.Rows) 
    foreach(DataColumn col in employees.Columns) 
     data.Add(row[col.ColumnName].ToString()); 
    // or 
    // data.Add(row[col.Ordinal].ToString()); 
標準ループで

for(int r = 0; r < employees.Rows.Count; r++) 
    for(int c = 0; c < employees.Columns.Count; c++) 
     data.Add(employees.Rows[r][c].ToString()); 
+0

私は '[0]'のようにそれをハードコーディングすることなく、すべての行を反復処理することが可能な任意の方法を使用すると、forループemployees.Columns.Countを使用することができます – Lara

+0

[1] ''など、あります。 –

+0

右列ではない列について話していますか? – Steve

0

多分あなたはそれを使用することができますか?

var dt = new DataTable(); 

dt.AsEnumerable().Select(row => new List<string> 
{ 
    row.Field<string>(0), 
    row.Field<string>(1) 
}); 
関連する問題