如何使用LINQ用'in'关键字编写Cosmos DB查询?

时间:2020-04-30 02:41:28

标签: c# linq-to-sql azure-cosmosdb azure-cosmosdb-sqlapi

我的azure cosmos db数据库中有此示例文档。

{
    "partitionKey": "SonicTag",
    "label": "SonicTag",
    "name": "Kasi Tournaments",
    "slug": "kasi-tournaments",
    "a2AQuestionsCount": 0,
    "iconUrl": null,
    "id": "1af53736-c492-40bf-8ef7-dba2d17f6c17"
}

当我在数据浏览器上运行以下查询时,得到的正是我想要的(3个具有指定ID的文档)。

SELECT * FROM c where c.id in 
   ("dc4201ff-35b8-4eda-b0a6-f9bc2bb93926",
    "3389f2f2-33f3-4b08-8d32-4602071eae30",
    "1af53736-c492-40bf-8ef7-dba2d17f6c17")
and c.partitionKey = "SonicTag"

例如,在我要查询所有标签的一个查询中,可以使用以下代码。

    var feedIterator = Container.GetItemLinqQueryable<SonicTag>(true)
        .Where(c => c.PartitionKey == nameof(SonicTag)
                    && c.Label == nameof(SonicTag)).ToFeedIterator();

但是我不知道如何编写我的LINQ来获取信息

请注意,在必须构造此LINQ的方法上,我收到一个ID列表,并且必须获取所有具有这些ID的标签。确保该参数最多只能包含5个ID。

与此同时,我使用的显然是不好的解决方法

var tags = new List<SonicTags>();
foreach (var id in IDs)
{
    tags.Add( Helper.ConvertStreamToObject( await Container.ReadItemStreamAsync(id, partitionKey)));
}

2 个答案:

答案 0 :(得分:0)

请查看以下LINQ to SQL translation文档,该文档将帮助您构造正确的表达式。一个例子:

运算符在哪里,示例#2”

LINQ lambda表达式

input.Where(
    family => family.parents[0].familyName == "Wakefield" &&
    family.children[0].grade < 3);

SQL

SELECT *
FROM Families f
WHERE f.parents[0].familyName = "Wakefield"
AND f.children[0].grade < 3

答案 1 :(得分:0)

我通过使用Contains的{​​{1}}方法找到了一个解决方案。下面是我的方法。

List<T>