2013-05-29 105 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; } 
} 

我也有我的蒙戈數據庫執行對用戶採集行動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對象。

+1

'Query.And'?那是你在找什麼? – WiredPrairie

回答

12

您可以使用Query.And()這樣的...

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

CSharp Driver Tutorial

或者你可以做到這一點LINQ風格,請參閱:CSharp Driver LINQ Tutorial

這也很有趣太:How to rewrite a MongoDB C# LINQ with a Projection Requirement using a MongoCursor

+0

不錯,我認爲更多的LINQ方法真的是我從一開始就追求的。我不記得如何做到這一點,我覺得有點愚蠢,但也許這可以節省別人幾分鐘的時間。 –

+0

不要覺得愚蠢! :)隨着MongoDB的流行度不斷增長,我相信它會有所幫助,所以+1這個問題;) – davmos

相關問題