2010-09-24 158 views
5

有人可以幫我回答如何用ObjectQuery bilder重寫原始SQL過濾器WHERE(...)或(...)嗎?如何使用ObjectQuery與由OR子句分隔的Where過濾器

String queryRaw = "SELECT ls.LocaleName, ls.IsActive, ls.LocaleDescription " + 
        "FROM RoutesEntities.Locales AS ls "; 

        //" WHERE ls.LocaleName = 'en' OR ls.LocaleName = 'de' " 

this._queryData = new ObjectQuery<DbDataRecord>(queryRaw, routesModel); 

我會使用Where()方法,但它會生成由AND分隔的子句,儘管我想用OR來代替。 QueryBilder有可能嗎? 我的意思是如何用它來生成「或分開」過濾器:

Where("it.LocaleName IN (@localeName)", new ObjectParameter("localeName", String.Join(",", localeName))) 

感謝,阿爾喬姆

回答

7

它再次發生,我回答我的問題我自己。謝謝你。

下面是答案:

的ObjectQuery爲EntityCommand DO NOT SUPPORT「IN」的條款尚未...這意味着沒有機會,直到你使用已經選擇的DataSet使用WHERE過濾器查詢發送給數據庫來自DB。因此,只有LINQ方法可以做到這一點,只有選擇列表<>

雖然,還存在另一種說不清楚的,但有效的決策 - 您可以使用多個OR條件查詢和他們的工作對我罰款:

ObjectQuery<DbDataRecord> query = query.Where("it.RouteID=1 OR it.RouteID=2"); 

希望這會幫助別人......享受:)

2

的ObjectQuery爲EntityCommand SUPPORT 「IN」 CLAUSE.The了Syntex是

ObjectQuery<SampleProduct> s = db.SampleProducts; 
s.Name = "SampleProductName"; 
string strIDList = "10,20,30"; 
s= s.Where("SampleProductName.ID IN {" + strIDList + "}"); 
0

的ObjectQuery爲EntityCommand支持 「IN」 的條款。

邏輯ObjectQuery的運算符:

ObjectQuery允許您將多個條件連接在一起。

  • 默認情況下,使用AND參數組合條件。 要在條件之間放置OR運算符,請在給定的Where方法之間調用Or()方法。 如果您希望使條件的代碼更清晰易讀,您還可以顯式調用And()方法。

例如://檢索名爲「Joe」或姓氏爲「Smith」的用戶。

變種whereQuery = UserInfoProvider.GetUsers()

.Where("FirstName", QueryOperator.Equals, "Joe") 
.Or() 
.Where("LastName", QueryOperator.Equals, "Smith"); 

參見更多:https://docs.kentico.com/display/K82/Retrieving+database+data+using+ObjectQuery+API