2016-09-27 35 views
-1

作爲C#中的新手,我試圖從datable中讀取每一行。然後根據特殊列的值,我將使用該值到開關中。用IEnumerable和C#中的字符串進行轉換的錯誤#

這裏是困擾我的代碼部分:

foreach(DataRow row in dtTableList.Rows) 
{ 

    string selection = (from DataRow line in dtTableList.Rows select (string)line["Name"]); 

    switch(selection) 
    { 
     //The switch case statement 
    } 

與「串選擇」行顯然是錯誤的,我得到的錯誤消息:

「無法隱式轉換 類型 'System.Collections.Generic.IEnumerable' 到 '字串'」

我試圖替換string selection通過var selection但我不能在我的交換機中使用它。

你們有沒有人知道我的錯誤可能是什麼原因以及如何解決?

有關信息,我試圖在StackOverflow上應用另一個post的代碼。

+0

'line [「Name」]'是一個IEnumerable。嘗試'line [「Name」]。FirstOrDefault()'獲取第一個元素。 –

+0

您必須使用Enumerate表達式,在本例中以'FirstOrDefault()'爲例。 – hellowstone

+0

你已經有'row',在交換機中使用'row [「Name」]''。 – Sinatr

回答

4

A DataTable通常存儲多行,所以結果是IEnumerable<string>而不是一個string。如果你只在第一行有興趣,或者只包含一個:

string selection = dtTableList.AsEnumerable() 
    .Select(r => r.Field<string>("Name")) 
    .FirstOrDefault(); 
// selection == null --> not a single row at all; 

如果您已經在foreach循環不需要LINQ查詢所有:

foreach(DataRow row in dtTableList.Rows) 
{ 
    string selection = row.Field<string>("Name"); 
    switch(selection) 
    { 
     // ... 
    } 
} 
+0

正如我在後面的評論中所說的答案,我需要爲我的數據表中的所有行進行選擇。所以我儘管我需要這樣寫,我是否需要改變它以符合你的建議或者你認爲我應該保留它? – DuffautM

0

你可以使用像下面的代碼

string selection = dtTableList.AsEnumerable().Select(dr => dr.Field<string>("CoumnName").ToString()).FirstOrDefault();