web-dev-qa-db-ja.com

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/C#の過去数バージョンでは、ExpandoObjectなどの動的オブジェクトの役割が拡張されており、基本的にこれを行う方法があるかどうか疑問に思っています。

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

明らかに、私は成功せずに上記のコードをすでに試しましたが、何かが足りないようです。

21
Matt Cashatt

型を宣言せずに新しい匿名オブジェクトを作成できるはずです。

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

Selectを使用してExpandoObjectのコレクションを返すことを妨げるものは何もありません。ExpandoObjectを適切に構築していないだけです。これが1つの方法です。

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