Лучший отвечающий
Можно ли передать анонимные методы или поля?

Вопрос
-
WPF C#
Добрый день.
Не знаю как правильно сказать
Можно ли передать анонимные методы или поля созданные в запросе Linq
var zagolovok = ObsListData.Where(c => c.IDRa == 5 ).GroupBy(c => c.IDPodRa) .Select(g => new { Name = g.Key, namePDRZD = g.FirstOrDefault().NamePodRaz, nameprdID = g.FirstOrDefault().NumberPodRalD });
Далее я хочу namePDRZD и nameprdID куда то передать. Но автоматически студия не может создать отдельный метод.
Т.е. это невозможно?
29 августа 2016 г. 11:32
Ответы
-
Добрый день!
Данный Linq запрос вернет IEnumerable анонимного типа.
Вы можете обернуть результат в dynamic. Например вот так:
var zagolovok = ObsListData.Where(c => c.IDRa == 5 ).GroupBy(c => c.IDPodRa) .Select(g => (dynamic) new { Name = g.Key, namePDRZD = g.FirstOrDefault().NamePodRaz, nameprdID = g.FirstOrDefault().NumberPodRalD });
Потом результат можете передать в метод с сигнатурой:
private void Method(IEnumerable<dynamic> enumerable) { enumerable.Select(x => x.namePDRZD); }
- Изменено Pavel Dorovsky 29 августа 2016 г. 12:40
- Помечено в качестве ответа DevingAs 29 августа 2016 г. 15:36
29 августа 2016 г. 12:37 -
Добрый день.
Но лучше, так как вам посоветовали в предыдущем ответе не делать, т.к. это приводит к отказу от строгой типизации.
Лучше под каждый такой случай сделать тип и работать не с анонимным, а нормальным типом, особенно если вы его передаете куда-то дальше.
- Помечено в качестве ответа DevingAs 29 августа 2016 г. 15:36
29 августа 2016 г. 14:10Отвечающий
Все ответы
-
Добрый день!
Данный Linq запрос вернет IEnumerable анонимного типа.
Вы можете обернуть результат в dynamic. Например вот так:
var zagolovok = ObsListData.Where(c => c.IDRa == 5 ).GroupBy(c => c.IDPodRa) .Select(g => (dynamic) new { Name = g.Key, namePDRZD = g.FirstOrDefault().NamePodRaz, nameprdID = g.FirstOrDefault().NumberPodRalD });
Потом результат можете передать в метод с сигнатурой:
private void Method(IEnumerable<dynamic> enumerable) { enumerable.Select(x => x.namePDRZD); }
- Изменено Pavel Dorovsky 29 августа 2016 г. 12:40
- Помечено в качестве ответа DevingAs 29 августа 2016 г. 15:36
29 августа 2016 г. 12:37 -
Добрый день.
Но лучше, так как вам посоветовали в предыдущем ответе не делать, т.к. это приводит к отказу от строгой типизации.
Лучше под каждый такой случай сделать тип и работать не с анонимным, а нормальным типом, особенно если вы его передаете куда-то дальше.
- Помечено в качестве ответа DevingAs 29 августа 2016 г. 15:36
29 августа 2016 г. 14:10Отвечающий -
Как уже отметили, лучше всего создать отдельный тип и работать с ним.
Также можно использовать Tuple (кортеж). Он обеспечит строгую типизацию. Правда, вместо говорящих названий свойств будут Item1, Item2 и т. п.
7 сентября 2016 г. 22:32