使用DataTable

时间:2017-04-21 09:21:51

标签: c# lambda

我试图将列数据从DataTable提取到List<string>。示例代码如下:

List<String> userNames = dataTable.Rows.OfType<DataRow>().
                                Select(dr => dr.Field<string>("UserName"))
                                .ToList();

我从Visual Studio 2015收到错误消息:

  

不能将lambda表达式用作动态参数   调度操作,而不先将其转发给委托或   表达式树类型。

DataTable有3行,所有数据的类型都为string

用Google搜索了几个小时但仍无法解决问题。我该如何解决这个错误?

更新:@IvanStoev发现我dataTabledynamic变量,而不是DataTable

3 个答案:

答案 0 :(得分:1)

您的代码看起来不错,但您也可以尝试以下内容:

var userNames = (from x in dataTable.AsEnumerable()
                select x.Field<string>("UserName")).ToList();

希望这有帮助!

答案 1 :(得分:0)

您必须在DataTable上使用AsEnumerable(),然后您将对DataRows进行操作。你可以试试这个:

List<String> userNames = dt.AsEnumerable().Select(dr => dr.Field<string>("UserName")).ToList();

答案 2 :(得分:0)

虽然之前已经回答过,但我认为值得一提 在运行时评估的dynamic类型,当我们尝试使用.访问属性时,很明显会出现编译时错误。 例如。

dynamic temp = new MyClass();
temp.prop1  // compile time error.

你必须将其强制转换回特定类型,如下所示:

((MyClass)temp).prop1  //   works.

在您的情况下,尝试将dataTable转换回DataTable

((DataTable)dataTable).Rows....