如何使用带有OR子句的Where过滤器的ObjectQuery

时间:2010-09-24 21:16:16

标签: c# sql filter where objectquery

有人可以帮我解答如何用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

4 个答案:

答案 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允许您将多个条件连接在一起。

  • 默认情况下,使用AND参数组合条件。        要在条件之间放置OR运算符,请在给定的Where方法之间调用Or()方法。         如果您希望使条件的代码更清晰,更易于阅读,也可以显式调用And()方法。

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