Les*_*ter 9 c# linq linq-query-syntax linq-method-syntax
我正在使用DataTable并注意到Resharper建议我可以将循环转换为LINQ表达式.我这样做了,它在查询表达式语法(简化)中重写:
var test1 = from DataRow row in dt.Rows select row;
Run Code Online (Sandbox Code Playgroud)
就个人而言,我更喜欢方法语法,所以重写它:
var test2 = dt.Rows.Select(row => row);
Run Code Online (Sandbox Code Playgroud)
它打破了.
'System.Data.DataRowCollection'不包含'Select'的定义,也没有扩展方法'Select'接受类型为'System.Data.DataRowCollection'的第一个参数'(你是否缺少using指令或程序集引用) ?)
由于查询表达式被转换为方法调用,为什么第一个工作但不是第二个?我希望两者都可以或者两者都不工作,这显然不是这样.
Jon*_*eet 12
第一个有一个显式类型的范围变量,所以它实际编译为:
var test2 = dt.Rows.Cast<DataRow>();
Run Code Online (Sandbox Code Playgroud)
(没有必要,Select因为这是一个简并查询表达式(select是一个无操作.)
另一种方法是打电话AsEnumerable给DataTableExtensions.我相信可能会有一些性能优势,但仅限于某些情况:
var test2 = dt.AsEnumerable();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1759 次 |
| 最近记录: |