2013-05-29 73 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

相关问题