gpt4 book ai didi

c# - 如何将 lambda 表达式作为参数插入 mongodb 'collection.find' 方法?

转载 作者:行者123 更新时间:2023-12-04 10:24:17 24 4
gpt4 key购买 nike

我是 lambda 表达式和委托(delegate)的新手。我不完全知道如何使用它们。所以我有这个方法,我想将 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

最佳答案

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

关于c# - 如何将 lambda 表达式作为参数插入 mongodb 'collection.find' 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60692309/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com