1

尝试在 Massive 中执行以下查询时,为什么会出现运行时绑定程序异常?

  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”的列。我收到绑定错误,因为成员和地址中的多个列有一个名为“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();

希望这对其他人有帮助。

4

1 回答 1

2

您在匿名对象中传递参数,而不是对象数组(参数)。因此,它成为第一个参数并且无法绑定,因为您的查询需要 2 个参数。另外Query返回 type 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});
于 2011-09-10T19:14:51.517 回答