重複の可能性あり:。 LINQ to SQL: 匿名型を返すか
LINQ to SQLの標準的なクエリで、データを無名型(様々なデータ型のデータを6列ほど含む)として返すものがあります。
この返されたオブジェクトを、メソッド呼び出し元に返すか、メソッドを含むオブジェクトのプロパティに代入して、プログラムの他の部分から利用できるようにしたいと思います。
このオブジェクトは無名型("var")ですが、どのようにすればよいのでしょうか?
EDIT - これがそのコードです。
using (ormDataContext context = new ormDataContext(connStr))
{
var electionInfo = from t1 in context.elections
join t2 in context.election_status
on t1.statusID equals t2.statusID
select new { t1, t2 };
}
C#では、どのメソッドも匿名型を明示的に型付けすることはできません。 いわば、名前を付けることができないので、メタデータ署名に表示することができないのです。
もし、本当に無名型の値を返したいのであれば、次の2つの方法があります。
1.メソッドの戻り値の型をSystem.Objectにする。 その後、別のメソッドで型付きの値を得るために邪悪なキャストハックを行うことができます。 これは非常に壊れやすいので、お勧めしません。
2.2. ジェネリックメソッドと型推論のトリックを使って、正しい戻り値の型を取得する。 これは、あなたのアプローチにとって非常に興味深いシグネチャの定義が必要です。
匿名型は、このような方法で受け渡しされることを意図したものではありません。 このような方法で関数間で受け渡しする必要がある場合は、明示的に型を定義したほうがよいでしょう。
Jon Skeetはこの方法についてブログを書いていて、そのタイトルはまさにHorribly Grotty Hackです。タイトルが示すように、無名型を返す方法を探すべきではないのです。その代わりに、この機能を実装するための正しい方法として、返すことができる型を作成する必要があります。
したがって、返される型の具体的な定義を作成し、それをクエリに入力して返されるようにすることをお勧めします。