为什么不使用EnumerableRowCollection <datarow> .Select()这样编译?</datarow>

时间:2010-04-01 13:48:17

标签: c# linq select extension-methods linq-to-dataset

这有效:

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,但显然我错了。我错过了什么?

2 个答案:

答案 0 :(得分: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") });

答案 1 :(得分: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"));
    }
}