首页 > 解决方案 > 如何将 lambda 表达式作为参数插入 mongodb 'collection.find' 方法?

问题描述

我是 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#mongodblambda

解决方案


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");

推荐阅读