尝试获取同时使用AND
和OR
的查询在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
部分。
任何人都可以帮忙解决这个问题吗?
答案 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))
这样的事情应该有用。