Как я могу получить значение свойства от анонимного типа? - PullRequest
20 голосов
/ 17 мая 2009

У меня есть сетка данных, заполненная запросом Linq. Когда сфокусированная строка в сетке данных изменяется, мне нужно установить переменную, равную одному из свойств этого объекта.

Я пытался ...

var selectedObject = view.GetRow(rowHandle);
_selectedId = selectedObject.Id;

... но компилятору это совершенно не нужно («встроенное выражение не может быть объявлением или помеченным утверждением»).

Кажется, собственность должна быть легко доступна. Проверка объекта во время выполнения показывает все ожидаемые свойства, я просто не знаю, как получить к ним доступ.

Как получить доступ к свойству анонимного объекта?

Редактировать для уточнения:

Я использую элемент управления DevExpress XtraGrid. Я загрузил этот элемент управления запросом Linq, состоящим из нескольких различных объектов, поэтому данные фактически не соответствуют ни одному из моих классов (т. Е. Я не могу привести их ни к чему).

Я использую .NET 3.5.

Когда я просматриваю результаты метода view.GetRow (rowHandle), я получаю анонимный тип, который выглядит следующим образом:

{ ClientId = 7, ClientName = "ACME Inc.", Jobs = 5 }

Моя цель - получить ClientId от этого анонимного типа, чтобы я мог выполнять другие действия (например, загружать форму с этой записью клиента).

Я попробовал пару предложений в ранних ответах, но не смог добраться до точки, где я мог получить этот ClientId.

Ответы [ 12 ]

0 голосов
/ 12 октября 2010

Надеюсь, это поможет, я передаю список интерфейсов, из которого мне нужно получить отдельный список. Сначала я получаю список анонимных типов, а затем обхожу его, чтобы перенести в мой список объектов.

private List<StockSymbolResult> GetDistinctSymbolList( List<ICommonFields> l )
            {
                var DistinctList = (
                        from a
                        in l
                        orderby a.Symbol
                        select new
                        {
                            a.Symbol,
                            a.StockID
                        } ).Distinct();

                StockSymbolResult ssr;
                List<StockSymbolResult> rl = new List<StockSymbolResult>();
                foreach ( var i in DistinctList )
                {
                                // Symbol is a string and StockID is an int.
                    ssr = new StockSymbolResult( i.Symbol, i.StockID );
                    rl.Add( ssr );
                }

                return rl;
            }
0 голосов
/ 17 мая 2009

Это может быть неправильно (у вас может не хватить кода), но вам не нужно индексировать строку, чтобы выбрать столбец, который вы хотите? Или, если «Id» - это столбец, который вы хотите, вы должны сделать что-то вроде этого:

var selectedObject = view.GetRow(rowHandle);
_selectedId = selectedObject["Id"];

Вот как я могу получить содержимое столбца в сетке данных. Теперь, если сам столбец является анонимным типом, тогда я не знаю, но если вы просто получаете именованный столбец с примитивным типом, то это должно сработать.

...