4

这有效:

from x in table.AsEnumerable()
where x.Field<string>("something") == "value"
select x.Field<decimal>("decimalfield");

但是,这不会:

from x in table.AsEnumerable()
.Where(y=>y.Field<string>("something") == "value")
.Select(y=>y.Field<decimal>("decimalfield"));

我也试过:

from x in table.AsEnumerable()
.Where(y=>y.Field<string>("something") == "value")
.Select(y=>new { name = y.Field<decimal>("decimalfield") });

查看.Select()方法的两个重载,我认为后两个应该都返回EnumerableRowCollection,但显然我错了。我错过了什么?

4

2 回答 2

4

问题是您正在结合执行 linq 查询的两种方式(查询语法和直接调用 linq 扩展方法)。该行from x in table.AsEnumerable()不是有效的查询,因为它至少需要一个select .... 这应该有效:

table.AsEnumerable() 
.Where(y=>y.Field<string>("something") == "value") 
.Select(y=>new { name = y.Field<decimal>("decimalfield") });
于 2010-04-01T13:57:45.977 回答
0

也许问题出在其他地方。这编译得很好:

using System.Data;

class Program
{
    static void Main(string[] args)
    {
        var dt = new DataTable();

        var res = from x in dt.AsEnumerable()
                  where x.Field<string>("something") == "value"
                  select x.Field<decimal>("decimalfield");

        var res2 = dt.AsEnumerable()
            .Where(y => y.Field<string>("something") == "value")
            .Select(y => y.Field<decimal>("decimalfield"));
    }
}
于 2010-04-01T13:54:00.297 回答