Используя LINQ, можно ли вывести динамический объект из оператора Select? Если да, то как?

В настоящее время в LINQ следующие компиляции и работают очень хорошо:

var listOfFoo = myData.Select(x => new FooModel{
     someProperty = x.prop1,
     someOtherProperty = x.prop2
});

public class FooModel{
     public string someProperty  { get; set; };
     public string someOtherProperty  { get; set; };
}

Однако последние несколько версий .NET/С# расширили роль динамических объектов, таких как ExpandoObject, и мне интересно, есть ли способ в основном сделать это:

var listOfFoo = myData.Select(x => new ExpandoObject{
     someProperty = x.prop1,
     someOtherProperty = x.prop2
});

Очевидно, что я уже пробовал код выше, но мне кажется, что я чего-то не хватает.

Ответ 1

Вы должны иметь возможность создать новый анонимный объект без объявленного типа:

var listOfFoo = myData.Select(x => new {
    someProperty = x.prop1,
    someOtherProperty = x.prop2
});

Ответ 2

Нет ничего, что помешало бы вам использовать Select для возврата коллекции ExpandoObject, вы просто неправильно создаете ExpandoObject. Здесь один из способов:

var listOfFoo = myData.Select(x =>
    {
        dynamic expando = new ExpandoObject();
        expando.someProperty = x.prop1;
        expando.someOtherProperty = x.prop2;
        return (ExpandoObject)expando;
    });