c# – 在lambda语法中输入linq中的声明

c# – 在lambda语法中输入linq中的声明,第1张

概述如何将类型声明插入lambda语法? 编译: from DataRow row in dataTable.Rows select transformOneRow(row) 不编译: dataTable.Rows.Select( r => transformOneRow(r)) 有错误 ‘System.Data.DataRowCollection’不包含’Select’的定义,也没有扩展方法’Sel 如何将类型声明插入lambda语法?

编译:

from DaTarow row in datatable.Rows select transformOneRow(row)

不编译:

datatable.Rows.Select( r => transformOneRow(r))

有错误
‘System.Data.DaTarowCollection’不包含’Select’的定义,也没有扩展方法’Select’接受类型为’System.Data.DaTarowCollection’的第一个参数’

我看到查询语法允许一个类型;这让编译器感到高兴.
如何将类型声明插入lambda语法?

我的方式是:

datatable.AsEnumerable().Select(r => transformOneRow(r));datatable.Rows.Cast<DaTarow>().Select(r => transformOneRow(r));datatable.Rows.OfType<DaTarow>().Select(r => transformOneRow(r)); // Also does filtering on type.
解决方法

How do I insert the type declaration into the lambda Syntax?

编译器将查询语法转换为方法语法.如果您对代码进行反编译,您将看到发出的IL调用Enumerable.Cast< T>:

IL_0000:  nop         IL_0001:  newobj      System.Data.Datatable..ctorIL_0006:  stloc.0     // datatableIL_0007:  ldloc.0     // datatableIL_0008:  callvirt    System.Data.Datatable.get_RowsIL_000D:  call        System.linq.Enumerable.Cast <--- ThisIL_0012:  ldsfld      Userquery+<>c.<>9__0_0IL_0017:  dup         IL_0018:  brtrue.s    IL_0031IL_001A:  pop         IL_001B:  ldsfld      Userquery+<>c.<>9IL_0020:  ldftn       Userquery+<>c.<Main>b__0_0IL_0026:  newobj      System.Func<System.Data.DaTarow,System.Data.DaTarow>..ctorIL_002B:  dup         IL_002C:  stsfld      Userquery+<>c.<>9__0_0IL_0031:  call        System.linq.Enumerable.SelectIL_0036:  stloc.1     // resultIL_0037:  ret

因此,正如您所做的那样,等效的是调用Enumerable.Cast< DaTarow>在您的查询中,在Select子句之前.

总结

以上是内存溢出为你收集整理的c# – 在lambda语法中输入linq中的声明全部内容,希望文章能够帮你解决c# – 在lambda语法中输入linq中的声明所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1231594.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存