C# 使用DataTable操作时,无法将lambda表达式用作动态调度操作的参数
我试图将列的数据从C# 使用DataTable操作时,无法将lambda表达式用作动态调度操作的参数,c#,lambda,C#,Lambda,我试图将列的数据从数据表提取到列表。示例代码如下: List<String> userNames = dataTable.Rows.OfType<DataRow>(). Select(dr => dr.Field<string>("UserName")) .ToList(); List userNames=dataTable.
数据表
提取到列表
。示例代码如下:
List<String> userNames = dataTable.Rows.OfType<DataRow>().
Select(dr => dr.Field<string>("UserName"))
.ToList();
List userNames=dataTable.Rows.OfType()。
选择(dr=>dr.Field(“用户名”))
.ToList();
我从Visual Studio 2015收到错误消息:
无法将lambda表达式用作参数
已调度的操作,而不首先将其强制转换为委托或
表达式树类型
DataTable有3行,所有数据的类型均为字符串
谷歌搜索了几个小时,仍然无法解决这个问题。如何解决此错误
更新:@IvanStoev注意到
dataTable
是一个动态
变量,而不是dataTable
您的代码看起来不错,但您也可以尝试以下操作:
var userNames = (from x in dataTable.AsEnumerable()
select x.Field<string>("UserName")).ToList();
var userNames=(来自dataTable.AsEnumerable()中的x)
选择x.Field(“用户名”).ToList();
希望这有帮助 必须对DataTable使用AsEnumerable(),然后才能对DataRows进行操作。您可以尝试以下方法:
List<String> userNames = dt.AsEnumerable().Select(dr => dr.Field<string>("UserName")).ToList();
List userNames=dt.AsEnumerable().Select(dr=>dr.Field(“用户名”)).ToList();
虽然前面已经回答了,但我认为值得一提
dynamic
在运行时评估的类型,当我们尝试使用
访问属性时,很明显会出现这种编译时错误。
例如
您必须将其转换回特定类型,如下所示:
((MyClass)temp).prop1 // works.
在您的情况下,请尝试将dataTable强制转换回dataTable,如下所示
((DataTable)dataTable).Rows....
您确定此行会产生错误吗?请提供一个示例,如果
dataTable
变量的类型为dynamic
,则我可以复制编译错误的唯一方法是。是这样吗?为什么它不是DataTable
。我正试图通过NPOI库读取excel文件。@IvanStoev是的,它是动态的
,不是数据表
,我刚刚检查了代码并更新了问题,抱歉我的错误。然后将其更改为数据表
,或者使用cast-((数据表)数据表)。行…
这有效。尽管问题是dataTable
是一个动态
变量,但还是要感谢您。您已经尝试过这个方法,并且效果良好。虽然问题是dataTable
是一个动态
变量,但还是要谢谢你。很高兴能帮助你,不知道你是否投票赞成:)编程快乐
((DataTable)dataTable).Rows....