如何在 c# Mongodb 驱动程序中使用 lambda select 使用异步的子列表
How to use lambda to select a sub list using async in c# Mongodb driver
我正在编写一个大量使用嵌套对象列表的应用程序,并且我正在努力寻找一种方法来检索我满意的子列表。
我对异步编程还很陌生,想做类似下面的事情,但如果不将其分成两个单独的调用,我似乎无法找到一种方法。不得不得到所有的子结果只是为了在事后将它们过滤成我想要的结果似乎并不那么有效。
baseObj
{
string ID;
string name;
List<subObj> subObjList
{
string ID;
string desc;
bool deleted;
};
}
我知道这行不通,但我觉得它有点小,我可以更改以使其工作,但我不知道从哪里开始。
List<subObj> = await collection.AsQueryable().Where(w=> w.ID == "id").Select(s => s.subObjList.Where(w => w.deleted == false).ToList()).FirstAsync();
这确实有效,但我认为它可以更有效地完成
baseObj obj = await collection.AsQueryable().Where(w=> w.ID == "id").firstAsync();
List<subObj> sObjList = obj.subObjList.Where(w => w.deleted == false).ToList();
有没有办法在一次查询中 select 子列表,或者根本不可能。
是的,只需使用 SelectMany 而不是 Select:
List<subObj> sObjList = collection.AsQueryable()
.Where(w=> w.ID =="id")
.SelectMany(x => x.subObjList)
.Where(w => w.deleted == false)
.ToList();
我正在编写一个大量使用嵌套对象列表的应用程序,并且我正在努力寻找一种方法来检索我满意的子列表。
我对异步编程还很陌生,想做类似下面的事情,但如果不将其分成两个单独的调用,我似乎无法找到一种方法。不得不得到所有的子结果只是为了在事后将它们过滤成我想要的结果似乎并不那么有效。
baseObj
{
string ID;
string name;
List<subObj> subObjList
{
string ID;
string desc;
bool deleted;
};
}
我知道这行不通,但我觉得它有点小,我可以更改以使其工作,但我不知道从哪里开始。
List<subObj> = await collection.AsQueryable().Where(w=> w.ID == "id").Select(s => s.subObjList.Where(w => w.deleted == false).ToList()).FirstAsync();
这确实有效,但我认为它可以更有效地完成
baseObj obj = await collection.AsQueryable().Where(w=> w.ID == "id").firstAsync();
List<subObj> sObjList = obj.subObjList.Where(w => w.deleted == false).ToList();
有没有办法在一次查询中 select 子列表,或者根本不可能。
是的,只需使用 SelectMany 而不是 Select:
List<subObj> sObjList = collection.AsQueryable()
.Where(w=> w.ID =="id")
.SelectMany(x => x.subObjList)
.Where(w => w.deleted == false)
.ToList();