首先 - 请有人建议一个更好的名称来区分内联语法和不那么多内联语法(即SQL-ish one)。 :)
我认为它们是完全可以互换的,而另一个则是一个语法糖。但是,我得到这个编译好了:
IEnumerable<DataRow> rows =
from DataRow row in table.Rows
select row;
,而
IEnumerable<DataRow> a = table.Rows.Select(...);
没有。我也尝试重新制作它,但那里没有 AsEnumerable(),也没有拿着行的表。我错过了什么?! 选择行;
我也注意到虽然行上有 AsQueryable(),但我仍然无法使用任何内联 LINQ魔法。没有选择(...)例如......
答案 0 :(得分:1)
您可以尝试以下方法:
IEnumerable<DataRow> a = table.Rows.Cast<DataRow>().Select(x=>x);
答案 1 :(得分:1)
是的,AsEnumerable存在,不是Rows
而是Table
。
var rows = table.AsEnumerable();
答案 2 :(得分:1)
问题是DataRowCollection(.Rows的类型)只实现IEnumerable
而不是IEnumerable<T>
。因此,以下语法仅适用于DataRow一词,在这里您实际上是从对象转换为DataRow
IEnumerable<DataRow> rows =
from DataRow row in table.Rows
select row;
如果删除DataRow一词,它将不再有效:
IEnumerable<DataRow> rows =
from row in table.Rows
select row;
这与以下内容相同:
IEnumerable<DataRow> a = table.Rows.Select(x => x);
所以你必须从对象转换到DataRow才能从IEnumerable
转到IEnumerable<DataRow>
所以你可以这样做:
IEnumerable<DataRow> a = table.Rows.Cast<DataRow>();
或者你可以在DataTable上使用AsEnumerable扩展方法,它在幕后做了类似的事情:
IEnumerable<DataRow> a = table.AsEnumerable();