C# linq中lambda语法的类型声明
如何将类型声明插入lambda语法 汇编:C# linq中lambda语法的类型声明,c#,linq,lambda,C#,Linq,Lambda,如何将类型声明插入lambda语法 汇编: from DataRow row in dataTable.Rows select transformOneRow(row) 不编译: dataTable.Rows.Select( r => transformOneRow(r)) 错误地 “System.Data.DataRowCollection”不包含“Select”的定义,并且找不到接受“System.Data.DataRowCollection”类型的第一个参数的扩展方法“Selec
from DataRow row in dataTable.Rows select transformOneRow(row)
不编译:
dataTable.Rows.Select( r => transformOneRow(r))
错误地
“System.Data.DataRowCollection”不包含“Select”的定义,并且找不到接受“System.Data.DataRowCollection”类型的第一个参数的扩展方法“Select”
我看到查询语法允许类型;这让编译器很高兴。如何将类型声明插入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.
dataTable.AsEnumerable().Select(r=>transformOneRow(r));
dataTable.Rows.Cast().Select(r=>transformOneRow(r));
dataTable.Rows.OfType()。选择(r=>transformOneRow(r));//还对类型进行过滤。
如何将类型声明插入lambda语法
编译器将把查询语法转换为方法语法。如果反编译代码,您将看到发出的IL调用Enumerable.Cast
:
IL_0000:nop
IL_0001:newobj System.Data.DataTable..ctor
IL_0006:stloc.0//dataTable
IL_0007:ldloc.0//dataTable
IL_0008:callvirt System.Data.DataTable.get_行
IL_000D:call System.Linq.Enumerable.Cast您是否使用System.Linq添加了代码>?@shay\uuuuu是。关于发生的情况,请参见下面的答案。
IL_0000: nop
IL_0001: newobj System.Data.DataTable..ctor
IL_0006: stloc.0 // dataTable
IL_0007: ldloc.0 // dataTable
IL_0008: callvirt System.Data.DataTable.get_Rows
IL_000D: call System.Linq.Enumerable.Cast <--- This
IL_0012: ldsfld UserQuery+<>c.<>9__0_0
IL_0017: dup
IL_0018: brtrue.s IL_0031
IL_001A: pop
IL_001B: ldsfld UserQuery+<>c.<>9
IL_0020: ldftn UserQuery+<>c.<Main>b__0_0
IL_0026: newobj System.Func<System.Data.DataRow,System.Data.DataRow>..ctor
IL_002B: dup
IL_002C: stsfld UserQuery+<>c.<>9__0_0
IL_0031: call System.Linq.Enumerable.Select
IL_0036: stloc.1 // result
IL_0037: ret