使用LINQ查询多级嵌套数组



我有一个模型,例如:

{
  nestedArray1: [
    {
      nestedArray2: [
        {
          id: 1
        }
      ]
    }
  ]
}

我正在尝试获取包含nestedarray2的项目,其中列表x = [1, 2, 3, 4, 5, ...]中的ID值。

我尝试运行以下查询而无用:

var query = model.AsQueryable().Where(m => m.nestedArray1.Any(s => s.nestedArray2.Any(m => ids.Any(id => id == m.id))));
var results = query.ToListAsync();

它说任何过滤器都不支持。

使用linq编写此类查询的正确方法是什么?

注意:

这是我可以使用Mongo查询语法进行操作的方法:

db.getCollection('model').find({
    "nestedArray1": {
        $elemMatch:{
            nestedArray2:{
                $elemMatch:{
                  "id" : {$in: [1, 2, 3, 4, 5] }
            }
        }
    }
}

}(

这是我可以使用c#而无需linq查询语法进行操作的方法:

var ids = new List<int>() { 1, 2, 3, 4, 5};
var filter = new FilterDefinitionBuilder<Model>()
        .ElemMatch(p => p.nestedArray1, new FilterDefinitionBuilder<NestedModel1>()
            .ElemMatch(s => s.nestedArray2, new FilterDefinitionBuilder<NestedModel2>()
                .In(m=> m.id, ids)));
return await Collection.Find(filter).ToListAsync();

根据您的模型,NestedArray2的项目只有一个具有一个ID的字段。

因此,考虑到上面的示例,您应该有这样的东西(我认为(:

var query = model.AsQueryable().Where(m => m.nestedArray1.Any(s => s.nestedArray2.Any(m => ids.Contains(m.id))));

最新更新