7

我无法弄清楚我想要完成的语法。如前所述,我正在为 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 类,它对我的​​ mongo 数据库中的 User 集合执行操作。下面是我如何创建一个真正简单的登录示例的示例。

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 Driver LINQ Tutorial

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

于 2013-05-29T21:28:22.937 回答