Почему EnumerableRowCollection <DataRow>.Select () не компилируется следующим образом? - PullRequest
4 голосов
/ 01 апреля 2010

Это работает:

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 ]

4 голосов
/ 01 апреля 2010

Проблема в том, что вы комбинируете два способа выполнения запроса 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") });
0 голосов
/ 01 апреля 2010

Может быть проблема в другом. Это компилируется просто отлично:

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"));
    }
}
...