ダイナミクスを返すときにRuntimeBinderexceptionを取得するのはなぜですか?
質問
私は巨大なものを使用していて、メンバーテーブルを持っています。私のメンバーのクラスには、メールでメンバーを見つけるための検索方法があります。
public class Members : DynamicModel
{
public Members(): base("TSConnection", "Members", "Id"){}
public dynamic Find(string email)
{
dynamic result = new ExpandoObject();
result.Success = false;
try
{
result.Member = this.Single(where: "Email=@0", args: email);
result.Success = result.Member != null;
}
catch (Exception ex)
{
result.Message = ex.Message;
}
return result;
}
}
これにより、予想どおりにすべてを返し、独特の単体テストテストで result.Member.Id
データが入っていることを示しています。
別々のクラスでは、アドレス。この方法を使用して、ユーザーが存在することを確認し、特定のメンバーのアドレスを挿入するときに使用するメンバーを取得するようにします。
public class Addresses : DynamicModel
{
public Addresses() : base("TS", "Addresses", "Id") { }
public dynamic Create(string email, string type, string address1, string address2, string city, string state, int countryId, string postcode)
{
var members = new Members();
dynamic result = new ExpandoObject();
result.Success = false;
//var member = members.Find(email);
result.Member = members.Single(where: "Email=@0", args: email);
dynamic address = new ExpandoObject();
if (result.Member != null)
{
address.Id = this.Insert(new {
MemberId = result.Member.Id,
AddressTypeId = (int)AddressType.Account,
Address1 = address1,
Address2 = address2,
City = city,
State = state,
Country = countryId,
Postcode = postcode
});
result.Address = address.Id != 0 ? address : null;
result.Success = address.Id != 0;
}
return result;
}
}
読み取るタブ付きラインに var member = members.Find(email);
これは、アクセスしようとするときにruntimebinderexceptionを返します member.Member.Id
. 。コードに足を踏み入れると、検索方法は正しいデータを「返す」ことですが、変数メンバーに渡されていません。奇妙なことに、コードを使用して以下の行でユーザーを取得した場合:
result.Member = members.Single(where: "Email=@0", args: email);
正常に動作します。しかし、物事を乾燥させておくのにはあまり良くありません。何が起こっているのか、アドレスクラス内のメンバークラスのFindメソッドを使用する方法はありますか?
ロイド
解決
それはあなたが戻ってきているからです result
, 、 から Find
, 、それはです ExpandoObject
. 。にアクセスします Member
の Addresses
コードを次のように変更する必要があります。
var members = new Members();
var result = members.Find(email);
var member = result.Member;
所属していません StackOverflow