質問: dcdc.Users.Select("new(UserId, FirstName, LastName)"); foreach (var item in x) { Console.WriteLine(item.ToString()); } } ``` ご覧のとおり、これは正常にコンパイルおよび実行されます。データベースからすべてのレコードを取得します。ただし、新しい匿名型のメンバーに実際に*アクセス*する方法はありません。 Selectクエリは文字列であるため、設計時に型の推論はありません。だから私は書くことができません: ``` Console.WriteLine(item.UserId); ``` コンパイラーは、匿名タイプのアイテムにUserIdという名前のメンバーがあることを認識していません。そのため、そのコードはコンパイルされません(For..Eachループ中にデバッガーを一時停止した場合でも、デバッグウィンドウにUserId、FirstName、LastNameのメンバーが存在することがわかります。 それで...これはどのように機能するはずですか?どうすれば匿名タイプのメンバーにアクセスできますか?
回答: これは、内部でリフレクションを使用するデータバインディング(私はこれが意図されたユースケースであると思われます)で正常に機能します。 .NET 4.0の`dynamic`でも正常に動作します。 ``` foreach (dynamic item in x) { Console.WriteLine(item.UserId); } ``` それ以外...リフレクションまたは`TypeDescriptor` 。 ``` foreach (object item in x) { Console.WriteLine(item.GetType().GetProperty("UserId").GetValue(item, null)); } ```