2014-09-29 35 views
0

如果我有一個包含兩個數字列的表(例如X和Y),並且需要檢索行X> Y.我如何使用BreezeJS來實現此目的?我遇到的所有示例都只能將列與固定值進行比較。按列篩選列操作符或BreezeJS中的運算符

編輯: 我嘗試使用.where("Id", "==", "Id")只是用於測試,並得到了以下錯誤:

查詢失敗:檢測到不兼容類型的二元運算符。運算符類型'Equal'找到操作數類型'Edm.Int32'和'Edm.String'。

爲了確認查詢本身沒有錯誤,我嘗試了.where("Id", "==", 1),並通過了它。

對此有任何線索?

回答

1

當Breeze執行查詢時,它會檢查謂詞右側的字符串以確定它是否是屬性名稱而不是文字,並且默認情況下會選擇將該值視爲屬性,如果屬性在被查詢的類型上存在相同的名稱。因此,如果'qtyOrdered'和'qtyAvailable'都是「訂單」類型的屬性,則支持以下內容。

var query = EntityQuery.from("Order").where("qtyOrdered", ">", "qtyAvailable"); 

這種行爲也被覆蓋(有時對於字符串列必要的),但很少需要。

+0

這是我最初做的,但得到了這個錯誤信息:「查詢失敗:檢測到一個不兼容類型的二元運算符,找到運算符類型'LessThan'的操作數類型'Edm.Decimal'和'Edm.String'。 。我也確保列名匹配。兩者都是小數,其中一個是可空的。 – Ziad 2014-09-30 18:12:15

+0

如果您使用像'camelCasing'這樣的命名公約,請確保這兩個名稱都是'客戶'端名稱。如果這是正確的,那麼通過爲這兩個屬性名稱調用entityType.getProperty來檢查您的entityType元數據,並檢查您是否獲得了具有兩種調用的預期數據類型的dataProperty。 – 2014-09-30 20:33:51

+0

其實.where(「Id」,「==」,1)可以正常工作,但不會.where(「Id」,「==」,「Id」)。如果名稱不匹配,兩者都不起作用。不知道我怎麼可以訪問entityType.getProperty。你能詳細說明一下嗎? – Ziad 2014-10-01 11:02:46