【发布时间】:2019-11-26 13:39:41
【问题描述】:
我有一个这样的集合(我删除了与问题无关的字段)
{
_id:ObjectId('5dd7d946cd9c645f1cdc21ef'),
Versions: [
{
"Barcode" : "200830001128132700636"
},
{
"Barcode" : "200830001128132700637"
}
]
},
{
_id:ObjectId('5dd7d946cd9c645f1cdc21eg'),
Versions: [
{
"Barcode" : "200830001128132700638"
},
{
"Barcode" : "200830001128132700639"
}
]
}
我需要在整个集合中找到最大(最大)的条形码。
我试过这样的代码:
var options = new FindOptions<Document>
{
Limit = 1,
Sort = Builders<Document>.Sort.Descending(d => d.Versions.Select(v => v.BarCode).Aggregate((v1, v2) => string.Compare(v1, v2) > 0 ? v1 : v2))
};
using var results = await _context.DocumentiItems.FindAsync(FilterDefinition<Document>.Empty, options);
但我得到 ArgumentNullException,我认为它无法使用聚合来翻译表达式。
你能建议我一个更好的方法吗?如果可能的话,我想避免使用 BSON 字符串并只使用 labmda 表达式。
DocumentiItems的类型是IMongoCollection<Document>
【问题讨论】:
-
怎么样:
_context.DocumentiItems.Max(item=>item.Versions.Max(version=>int32.Parse(version["Barcode"]))); -
sorry IMongoCollection 没有 Max(),如果没有其他解决方案,我会尝试使用 LINQ to mongo 的方法
-
只使用 AsQueryable :)