Dynamic Linq - в типе datarow нет свойства или поля

Я использую таблицу клиентов Northwind, в которой я заполняю набор данных и получаю данные.

Я пытаюсь использовать динамический linq и хочу динамически выбирать имя столбца

var qry = MyDataTable.AsEnumerable().AsQueryable().Select("new(Country)");

Прямо сейчас у меня жестко запрограммирована страна, но даже тогда я получаю эту ошибку

No property or field 'Country' exists in type 'datarow'

Я хотел бы в конечном итоге изменить этот запрос, чтобы имя столбца принималось динамически.

Пожалуйста помоги!!! благодаря.


person Graci    schedule 13.04.2011    source источник
comment
Вы можете указать, что Слаума дал правильный ответ, нажав на галочку рядом с его ответом.   -  person Robert Harvey    schedule 13.04.2011


Ответы (1)


Важная подсказка здесь (выделена жирным шрифтом):

В типе "datarow" нет свойства или поля "Страна".

Метод расширения AsEnumerable класса DataTable возвращает IEnumerable<T>, где T имеет тип DataRow. Теперь Select метод Dynamic LINQ хочет работать с этим типом DataRow, который, конечно, не имеет свойства Country.

Вместо этого вы можете попробовать следующее:

var qry = MyDataTable.AsEnumerable().AsQueryable()
    .Select("new(it[\"Country\"] as CountryAlias)");

it теперь представляет собой переменную типа DataRow, и вы можете использовать методы этого типа, а также, возможно, индексатор в моем примере выше. (Динамический LINQ поддерживает доступ к элементам массива по целочисленному индексу, но я не уверен, что сработает ли доступ к индексатору с помощью строкового ключа.)

person Slauma    schedule 13.04.2011
comment
Большое спасибо, мне просто пришлось использовать как - person Graci; 13.04.2011
comment
var qry = MyDataTable.AsEnumerable (). AsQueryable () .Select (новый (он [\ Country \]) как CountryAlias); - person Graci; 13.04.2011
comment
Да, я также только что убедился, что as необходимо. Я отредактирую свой ответ, чтобы исправить это. - person Slauma; 13.04.2011