2016-04-22 47 views
-1

我看到很多複雜的例子用於轉換DataTable與多成員行here但在我的情況下,查詢只是從表中返回一列,也就是說0..N個字符串/ varchars,如:如何使用單列DataTable的結果填充字符串的通用列表?

[email protected] 
[email protected] 

我覺得這樣的事情應該工作:

DataTable UnitReportPairEmailValsDT = new DataTable(); 
string qry = string.Format(SQL.UnitReportPairEmailQuery, unit, rptId); 
UnitReportPairEmailValsDT = SQL.ExecuteSQLReturnDataTable(
    qry, 
    CommandType.Text, 
    null 
    ); 

List<String> emailAddresses = new List<string>(); 
foreach (string emailaddr in UnitReportPairEmailValsDT) 
{ 
    emailAddresses.Add(emailaddr); 
} 

...但它不會編譯(」 foreach語句不能對類型的變量‘System.Data.DataTable’,因爲「操作System.Data.DataTable'不包含'GetEnumerator'的公共定義「)

我嘗試在」UnitReportPairEmailValsDT「中追加」.AsEnumerable「爲」「,但這也激起了編譯器的憤怒。

+1

'List dbNames = myDT.AsEnumerable()。Select(n => n.Field (「Name」))。ToList();' – Plutonix

回答

2

錯誤說你不能通過DataTable循環對象本身,可能你需要循環通過DataRows

使用此。

foreach(DataRow row in UnitReportPairEmailValsDT.Rows) 
{ 
    emailAddresses.Add(row["emailaddr"].ToString()); // assuming you have emailaddr column. 
} 

其他選項,使用Linq

emailAddresses = UnitReportPairEmailValsDT 
         .AsEnumerable() 
         .Select(row=> row.Field<string>("emailaddr")) 
         .ToList(); 
2

嘗試這樣的事:

List<String> emailAddresses = new List<string>(); 
foreach (DataRow row in UnitReportPairEmailValsDT.Rows) 
{ 
    emailAddresses.Add(row.Item(0)); 
} 
+0

您的意思是「row.Item(0)」,而不是「dr .Item(0)「對不對? –

+0

這工作(無論如何編譯):emailAddresses.Add(dr [0] .ToString()); –

1

假設DT然後使用LINQ數據表: dt.Rows.Select(X = > x [0] +「」)。ToList()會給你List。請小心使用Select(x => xToString()),因爲如果列值爲null,則容易出錯。 x [0] +「」確保返回null空字符串。

相關問題