【问题标题】:How do I insert a lambda expression as a parameter to a mongodb 'collection.find' method?如何将 lambda 表达式作为参数插入 mongodb 'collection.find' 方法?
【发布时间】:2020-03-15 20:21:51
【问题描述】:

我是 lambda 表达式和委托的新手。我不完全知道如何使用它们。 所以我有这个方法,我想将 lambda 表达式参数传递给 (x : x.name == "testName"),这样我就可以获取名称为 "testname" 的 Mongodb 记录。

public List<BaseModel> get(*lambda expression here*)
    {


        List<User> users = Database.userCollectionObjs.Find(*lambda expression here*).ToList();
        List<BaseModel> baseModels = new List<BaseModel>();
        foreach (User user in users)
        {

            baseModels.Add(user);
        }

        return baseModels;

    }

显然,如果我这样做:

        List<User> users = Database.userCollectionObjs.Find(user => user.name == "testuser").ToList();

它有效。 但是如何将此表达式作为参数传递给我的 get(),然后将其插入 userCollectionObjs.Find

【问题讨论】:

    标签: c# mongodb lambda


    【解决方案1】:

    Find 扩展方法定义为

    public static IFindFluent<TDocument, TDocument> Find<TDocument>(
        this IMongoCollection<TDocument> collection,
        Expression<Func<TDocument, bool>> filter, //<-- NOTE THE FILTER
        FindOptions options = null
    )
    

    记下filter 参数的类型。

    您需要为您的收藏传递适当的过滤器。

    假设userCollectionObjs 持有User 那么get() 看起来像

    public List<BaseModel> get(Expression<Func<User, bool>> filter) {
        List<User> users = Database.userCollectionObjs.Find(filter).ToList();
        List<BaseModel> baseModels = new List<BaseModel>();
        foreach (User user in users) {
            baseModels.Add(user);
        }
        return baseModels;
    }
    

    这将允许根据需要调用get 函数

    List<BaseModel> baseModels = myClass.get(user => user.name == "testuser");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多