2

试图获得一个同时具有ANDOR在 C# 中工作的查询。

在 SQL Server 中会是这样的:

... where (Code = 'abc' OR Description = 'def') AND (Flag = 0)

使用 MongoVUE,我似乎已经可以使用它了:

{ "$or" : [{ "Description" : /def/i }, { "Code" : /abc/i }], "$and": [{ "Flag" : 0 }] }

但似乎无法用 C# 得到它:试过这个:

List<IMongoQuery> qryValue = new List<IMongoQuery>();
qryValue.Add(Query.EQ("Code", "abc"));
qryValue.Add(Query.EQ("Description", "def"));
qryValue.Add(Query.And(Query.EQ("Flag", 1)));
var query = Query.Or(qryValue.ToArray());

但把这个拿回来:

{ "$or" : [{ "Code" : "abc" }, { "Description" : "def" }, { "Flag" : 1 }] }

这并没有给出正确的结果:缺少AND部分。

任何人都可以帮助解决这个问题吗?

4

1 回答 1

4

你把它拿回来了,因为你把你所有的东西都Query.EQ放在Query.Or了最后一行。将单个值传递给 aQuery.And不会做任何事情;就像您将单个值传递给任何其他方法一样。你没有用任何东西和-ed它。

您需要像上面在 SQL 中那样用代码编写它:尊重括号

首先将您Or组合在一起,并将其作为第一个参数传递给And,然后是单个附加子句 for Flag

var clauses = new[] { Query.EQ("Code", "abc"), Query.EQ("Description", "def") };
var query = Query.AND(Query.OR(clauses), Query.EQ("Flag", 1))

像这样的东西应该工作。

于 2013-01-21T21:57:18.733 回答