7

達成しようとしていることの構文を理解するのに苦労しています。述べたように、MongoDB 用の C# ドライバーを使用しています。

次のように定義された User エンティティがあります

[BsonIgnoreExtraElements]
public class User : MongoEntity
{
    [BsonElement]
    public string Username { get; set; }

    [BsonElement]
    public string Password { get; set; }

    [BsonElement]
    public string Email { get; set; }
}

mongo データベースの User コレクションに対してアクションを実行する UserService クラスもあります。以下は、実際の単純なログイン例を作成する方法の例です。

public UserPresentation Login(string username, string password)
{
    var entityQuery = Query<User>.EQ(e => e.Username, username.ToUpper());

    var entity = this.MongoConnectionHandler.MongoCollection.FindOne(entityQuery);

    return (entity != null && entity.Id.ToString().Length > 0 && entity.Password == password) ? new UserPresentation(entity) : null;
}

これは機能しますが、私の質問は...ユーザー名==ユーザー名のみを検索するクエリを作成し、要素を返し、ifステートメントでパスワードを比較する代わりに、どうにかして初期entityQueryオブジェクトにフィールドを追加できますか.

4

1 に答える 1

14

このように使用できますQuery.And()...

var entityQuery = Query.And(
                      Query<User>.EQ(e => e.Username, username.ToUpper()),
                      Query<User>.EQ(e => e.Password, password)
                  );

CSharp ドライバーのチュートリアルを参照してください。

または、LINQ スタイルで行うこともできます。参照: CSharp ドライバー LINQ チュートリアル

これもまた興味深いです: How to rewrite a MongoDB C# LINQ with a Projection Requirement using a MongoCursor

于 2013-05-29T21:28:22.937 に答える