5

有人可以帮我回答如何用 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 可以吗?我的意思是如何使用它来生成“或分离”过滤器:

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

谢谢,阿尔特姆

4

4 回答 4

8

它再次发生,我自己回答我的问题。谢谢你。

这是答案:

ObjectQuery as EntityCommand DO NOT SUPPORT "IN" CLAUSE YET ...这意味着在您使用已经从 DB 中选择的 DataSet 之前,没有机会使用 WHERE IN 过滤器将查询发送到 DB。所以只有 LINQ 方法可以做到这一点,而且只有选定的 List<>

不过,还有一个不太明确但有效的决定——您可以在查询中使用多个 OR 条件,它们对我来说很好用:

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

希望这会帮助某人......享受:)

于 2010-09-27T15:55:23.067 回答
5

您可以在 ObjectQuery 中使用 IN 子句。您只需要使用 { 而不是 (.

例如“it.ID IN {4,5,6}”而不是“it.ID IN (4,5,6)”

这个答案的所有功劳都来自 使用 Linq to Entities 的“包含()”解决方法?

于 2011-09-02T03:58:30.913 回答
2

ObjectQuery as EntityCommand SUPPORT "IN" CLAUSE. The syntex is

ObjectQuery<SampleProduct> s = db.SampleProducts;
s.Name = "SampleProductName";
string strIDList = "10,20,30";
s= s.Where("SampleProductName.ID IN {" + strIDList + "}");
于 2012-03-29T14:55:23.333 回答
0

ObjectQuery 作为 EntityCommand 支持“IN”子句。

ObjectQuery 的逻辑运算符:

ObjectQuery 允许您将多个 where 条件连接在一起。

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

例如: // 检索名字为“Joe”或姓氏为“Smith”的用户。

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

于 2016-05-04T07:24:30.423 回答