Есть ли способ динамически спроецировать кучу селекторных выражений на новый анонимный тип, который может использоваться, например, для операторов.Select() или комбинированных элементов доступа?
Скажем, у меня есть класс с 3 свойствами
public class DummyClass {
public int Id { get; set; }
public string Name { get; set; }
public string Category { get; set; }
}
Чтобы получить доступ к одному из них с помощью элемента доступа к члену, я могу написать что-то вроде этого:
public class DummyClass...
// x => x.Id
public static Expression<Func<DummyClass, int>> IdAccessor = f => Id;
То же самое касается члена Name
или Category
. Теперь я хотел бы вернуть оба Id
и Name
как анонимный тип, используя оба селектора.
// combined x => x.Id and x => x.Name into x => new { x.Id, x.Name }
return new { IdAccessor, NameAccessor }
Однако я зацикливаюсь, делая это динамически, поскольку я не могу создать анонимный тип, например, Expression.New()
не зная его фактического типа.
РЕДАКТИРОВАТЬ
Я переписал вопрос другим примером, который должен прояснить еще кое-что.
Не уверен, что вы действительно подразумеваете под "обоими селекторами", но именно так я буду использовать анонимный тип; при выборе конкретных значений из списка объектов. Прошу прокомментировать, если это не то, что вы имеете в виду.
var myDummies = new List<DummyClass> ...
var result = myDummes.Select(o => new
{
IdAccessor = o.Id,
NameAccessor = o.Name
Header = String.Format("{0} ({1})", o.Name, o.Category)
});
foreach(var r in result) { ... }
ExpandoObject
с помощьюExpression.New()
?return new...
заявления? Что ты пытаешься вернуть? Селектор? Или фактический объект анонимного типа? В любом случае, как вы ожидаете решить проблему, заключающуюся в том, что анонимные типы бесполезны вне метода, в котором они объявлены? Этот вопрос крайне неясен, и не в последнюю очередь из-за отсутствия хорошего примера кода, который адекватно иллюстрирует, какого черта вы говорите.