2011-09-10 24 views
1

爲什麼我在嘗試在Massive中執行以下查詢時遇到運行時聯編程序異常?RuntimeBinderException on Massive query

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(); 

希望這可以幫助別人。

+1

認爲你是平均'新的[] {電子郵件,類型}'吧? – TheCodeKing

回答

2

您正將一個參數傳遞給一個匿名對象,而不是一個對象數組(params)。因此,它成爲第一個參數並且無法綁定,因爲您的查詢需要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}); 
+0

我仍然收到綁定錯誤。我嘗試了你建議的兩種方法。 :s – lloydphillips

+0

在返回線上進行調試時。我正在深入研究result [] .DynamicView和所有屬性都存在並被填充,但我仍然收到綁定錯誤。我意識到我不得不將SELECT *更改爲SELECT。*,因爲它返回多個Id字段。我已經在Management Studio中檢查了SQL,看起來很好。不知道爲什麼我仍然收到綁定錯誤。 – lloydphillips

+0

確切的錯誤是什麼? – TheCodeKing