9

Country、Province、City の 3 つの文字列フィールドを持つオブジェクトがあります。null または何らかの文字列名を含めることができます。

まったく同じ値ですべてのデータをクエリしたい。

たとえば、すべてのデータが必要です

City = null,
Province = "WA",
Country = "USA"

BsonDocument を作成しました:

var lookup = new QueryDocument
{
    {"GeoPosition.City", userLocation.City},
    {"GeoPosition.Province", userLocation.Province},
    {"GeoPosition.Country", userLocation.Country}
};

しかし、null フィールドは破棄され、ドキュメントは次のようになります。

{
    "GeoPosition.Province" : "WA",
    "GeoPosition.Country" : "USA"
}

私が使用しようとしている場合

Query.EQ("GeoPosition.City", userLocation.City)

パラメータをnullにすることはできないという例外があります。

ドキュメントにあるように、値がnullに等しい場合、クエリチェックを作成しても問題はありません。これは C# ドライバーの問題です。この問題を解決する方法はありますか?

4

2 に答える 2

16

都市変数のデータ型によって異なります。city変数のタイプがBsonValueの場合、??を使用できます。直接演算子:

BsonValue city = null;
var query = Query.EQ("city", city ?? BsonNull.Value);
Console.WriteLine(query.ToJson());

city変数が文字列型の場合、コンパイラを満足させるために追加の変換キャストが必要です。

string city = null;
var query = Query.EQ("city", (BsonValue)city ?? BsonNull.Value);
Console.WriteLine(query.ToJson());
于 2012-05-22T19:17:30.327 に答える
3

C#クラスではなく、BsonDocumentsを使用していると思います。そのため、null値の場合、BsonNull.Valueを使用して、データベースおよびクエリでnull値を表す必要があります。

于 2012-05-21T13:31:52.890 に答える