这有效:
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,但显然我错了。我错过了什么?
答案 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"));
}
}