如何使用lambda来选择C#MongoDB的驱动程序中使用异步子列表

问题描述 投票:0回答:1

我写的是大量使用嵌套的对象列表中的应用程序,我在努力寻找一种方法来检索我很高兴与子表。

我是相当新的异步编程,很想做一些像下面,但我似乎无法想出一个办法,而不把它分成两个单独的呼叫。拥有让所有只有子结果将它们过滤到我想要的东西的事实后,似乎并没有全部有效。

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

有没有办法在短短一个查询,选择子列表,或者是不可能的。

c# mongodb mongodb-.net-driver
1个回答
1
投票

是啊,只要使用的的SelectMany而不是选择:

List<subObj> sObjList = collection.AsQueryable()
    .Where(w=> w.ID =="id")
    .SelectMany(x => x.subObjList)
    .Where(w => w.deleted == false)
    .ToList();
© www.soinside.com 2019 - 2024. All rights reserved.