2013-05-29 9 views
6

私が達成しようとしているものの構文を理解できません。前述のように、私はMongoDBのC#ドライバを使用しています。MongoDB用のC#ドライバを使用したマルチフィールドクエリ

私は

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

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

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

として定義Userエンティティを持っている私も自分のmongoデータベースでのユーザーのコレクションに対してアクションを実行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オブジェクトに転送します。

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

CSharp Driver Tutorial

を参照するか、またはあなたはそれをLINQスタイルを行うことができます。このようなQuery.And()を使用することができます

+1

'Query.And'?それはあなたが探しているものですか? – WiredPrairie

答えて

12

...、以下を参照してください。CSharp Driver LINQ Tutorial

これはあまりにも面白いです:How to rewrite a MongoDB C# LINQ with a Projection Requirement using a MongoCursor

+0

良いLINQのアプローチは、最初から私が後にしていたものだと思います。私はこれを行う方法を覚えていないため、親切な気分になりますが、おそらくこれで数分の時間をかけて他の人を救うでしょう。 –

+0

ダムを感じないでください! :) MongoDBの人気が高まるにつれて、私はそれが助けになると確信しています。 – davmos

関連する問題