Reputation: 2366
I'm having trouble figuring out syntax for what I'm trying to accomplish. As stated I'm using the C# driver for MongoDB.
I have a User entity defined as
[BsonIgnoreExtraElements]
public class User : MongoEntity
{
[BsonElement]
public string Username { get; set; }
[BsonElement]
public string Password { get; set; }
[BsonElement]
public string Email { get; set; }
}
I also have a UserService class that performs actions against the User collection in my mongo database. Below is an example of how i'm creating a real simple login example.
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;
}
This works, however my question is... instead of creating a Query that only looks for Username == username, returning the element and then comparing the password in an if statement, can I somehow append more fields to the intial entityQuery
object.
Upvotes: 8
Views: 13435
Reputation: 9577
You can use Query.And()
like this...
var entityQuery = Query.And(
Query<User>.EQ(e => e.Username, username.ToUpper()),
Query<User>.EQ(e => e.Password, password)
);
Or you could do it LINQ style, see: CSharp Driver LINQ Tutorial
This is also interesting too: How to rewrite a MongoDB C# LINQ with a Projection Requirement using a MongoCursor
Upvotes: 14