如何从Cosmos DB Order按日期字符串返回查询?

时间:2019-05-05 09:36:38

标签: linq lambda azure-cosmosdb datetime-format

我有一个cosmos db集合。我需要查询所有文档并按创建日期的顺序返回它们。创建日期是一个已定义的字段,但由于历史原因,它的字符串格式为MM / dd / yyyy。例如:02/09/2019。如果仅按此字符串排序,结果将是混乱的。

我正在使用linq lambda在webapi中编写查询。我试图解析字符串并尝试转换字符串。两者均返回“不支持的方法”。

这是我的查询:

var query = Client.CreateDocumentQuery<MyModel>(CollectionLink)
                            .Where(f => f.ModelType == typeof(MyModel).Name.ToLower() && f.Language == getMyModelsRequestModel.Language )
                            .OrderByDescending(f => f.CreationDate)
                            .AsDocumentQuery();

感谢任何建议。谢谢。返回并修改字段格式(这会影响许多其他事情)将是巨大的努力。我希望避免这种情况。

1 个答案:

答案 0 :(得分:0)

Chen Wang。由于排序依据不支持派生值或子查询(link),因此我认为您需要自己对派生值进行排序。

您可以在宇宙数据库中由UDF构造if ( (found.type == (AVMetadataObject.ObjectType.qr) && found.stringValue != nil) || (found.type == (AVMetadataObject.ObjectType.ean13) && found.stringValue != nil) || ..... ) MM/dd/yyyy

udf:

yyyymmdd

sql:     从c中选择udf.getValue(c.time)作为时间

enter image description here

然后您可以按照c#代码中class的属性值对数组进行排序。请遵循这种情况:How to sort an array containing class objects by a property value of a class instance?