RuntimeBinderexception on Massive Query
質問
Massiveで次のクエリを実行しようとするときに、Runtime Binderの例外を取得するのはなぜですか?
public dynamic Find(string email, string type)
{
dynamic result = new ExpandoObject();
result = this.Query(@"SELECT * FROM Addresses a
INNER JOIN Members m ON m.Id = a.MemberId
INNER JOIN AddressType at ON at.Id = a.AddressTypeId
WHERE m.Email = @0 AND at.Type = @1", new {email, type});
return result;
}
編集してソリューションを表示する:「ID」という名前の1つの列のみが返されたことを確認するためにクエリを変更する必要がありました。メンバーとアドレスの複数の列に「ID」という名前の列があるため、私はバインディングエラーを取得していました。クエリで単一の結果を取得するには、これを変更する必要がありました。
result = this.Query(@"SELECT a.* FROM Addresses a
INNER JOIN Members m ON m.Id = a.MemberId
INNER JOIN AddressType at ON at.Id = a.AddressTypeId
WHERE m.Email = @0 AND at.Type = @1", new object[] { email, type }).Single();
これが他の誰かを助けることを願っています。
解決
オブジェクトアレイ(PARAMS)の代わりに、匿名オブジェクトでARGSを渡しています。したがって、それは最初の引数になり、クエリが2つの引数を期待するため、バインドできません。加えて Query
タイプを返します IEnumerable<dynamic>
.
これにコードを変更します:
public dynamic Find(string email, string type)
{
IEnumerable<dynamic> result;
result = this.Query(@"SELECT a.* FROM Addresses a
INNER JOIN Members m ON m.Id = a.MemberId
INNER JOIN AddressType at ON at.Id = a.AddressTypeId
WHERE m.Email = @0 AND at.Type = @1", email, type);
// decide how you want to handle multiple results here
return result.FirstOrDefault();
}
または、明示的なオブジェクト配列を使用できます。
WHERE m.Email = @0 AND at.Type = @1", new object[] {email, type});
所属していません StackOverflow