使用AND和OR

时间:2013-01-21 21:47:34

标签: c# mongodb

尝试获取同时使用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部分。

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

1 个答案:

答案 0 :(得分:4)

由于您将所有Query.EQ放入最后一行的Query.Or,因此您已收回该消息。将单个值传递给Query.And不会做任何事情;它就像你将一个值传递给任何其他方法一样。你没有用任何东西编辑它。

您需要像在SQL中一样在代码中编写它:尊重括号

首先将Or组合在一起,然后将其作为第一个参数传递给And,然后是Flag的单个附加条款。

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

这样的事情应该有用。