2

とC#の両方ANDを含むクエリを取得しようとしています。OR

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単一の値をに渡して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))

そのようなものが機能するはずです。

于 2013-01-21T21:57:18.733 に答える