我试图将列数据从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发现我dataTable
是dynamic
变量,而不是DataTable
。
答案 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....