c# - 如何将 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
解决方案
该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");
推荐阅读
- hyperledger-fabric - 在 Hyperledger Fabric 中,背书策略中的“Org1MSP.member”、“Org1MSP.peer”、“Org1MSP.admin”、“Org1MSP.client”有什么区别?
- c# - 如何让 Parallel 等到所有异步任务完成?
- vue.js - 如何使用 vue 路由器进行阶梯式导航?
- java - 程序中的正则表达式不起作用
- r - 使用李克特包的李克特图 100% 比例尺
- angular - Angular Service 变量未在组件中更新
- r - 如何将特定文件位置作为参数提供给 R 中的 writeBin() 方法?
- java - 魔方给出 ArrayIndexOutOfBoundException
- uml - Archimate 的图形符号的起源是什么?
- python - 为我的项目运行图像时出现错误。在这里,我正在尝试对我的应用程序进行 dockerize