有人可以帮我解答如何用ObjectQuery bilder重写原始SQL过滤器WHERE(...)OR(...)吗?
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分隔的where子句,尽管我想使用OR代替。是否可以使用QueryBilder? 我的意思是如何使用它来生成“OR分离”过滤器:
Where("it.LocaleName IN (@localeName)", new ObjectParameter("localeName", String.Join(",", localeName)))
谢谢,Artem
答案 0 :(得分:8)
它再次发生,我自己回答我的问题。谢谢你。
以下是答案:
ObjectQuery as EntityCommand不支持“IN”CLAUSE YET ...这意味着在您使用DB中已经选择的DataSet之前,没有机会使用WHERE IN过滤器向DB发送查询。因此,只有LINQ方法可以执行此操作,并且只能使用选定的List&lt;&gt;
尽管如此,还有一个不太明确但有效的决定 - 您可以在查询中使用多个OR条件,它们对我来说很好:
ObjectQuery<DbDataRecord> query = query.Where("it.RouteID=1 OR it.RouteID=2");
希望这会有所帮助......享受:)
答案 1 :(得分:5)
您可以在ObjectQuery中使用IN子句。你只需要使用{而不是(。
例如“it.ID IN {4,5,6}”而不是“it.ID IN(4,5,6)”
这个答案的所有功劳都来自 'Contains()' workaround using Linq to Entities?
答案 2 :(得分:2)
ObjectQuery as EntityCommand SUPPORT“IN”CLAUSE。syntex是
ObjectQuery<SampleProduct> s = db.SampleProducts;
s.Name = "SampleProductName";
string strIDList = "10,20,30";
s= s.Where("SampleProductName.ID IN {" + strIDList + "}");
答案 3 :(得分:0)
ObjectQuery as EntityCommand SUPPORT&#34; IN&#34;条款。
ObjectQuery的逻辑运算符:
ObjectQuery允许您将多个条件连接在一起。
Ex://检索名字为&#34; Joe&#34;或姓氏是&#34;史密斯&#34;。
var 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