簡體   English   中英

使用Linq查詢多層嵌套數組

[英]Query With Multi-Level Nested Arrays Using Linq

我有一個模型,例如:

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

我正在嘗試獲取包含nestedArray2的ID為列表x = [1, 2, 3, 4, 5, ...]

我嘗試運行以下查詢無濟於事:

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] }
            }
        }
    }
}

})

這是我如何在不使用Linq查詢語法的情況下使用C#做到這一點:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM