编译:
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中的声明所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)