使用IEnumerable和C#中的字符串进行转换时出错

时间:2016-09-27 12:10:53

标签: c# datatable

作为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'“

我尝试将string selection替换为var selection,但我无法在我的切换中使用它。

你们中的任何人都知道可能导致我的错误的原因以及如何解决它吗?

有关信息,我尝试在StackOverflow上应用另一个post的代码。

2 个答案:

答案 0 :(得分:4)

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) 
    {
       // ...
    }
}

答案 1 :(得分:0)

您可以使用以下代码

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