У меня есть коллекция версионных документов ("rHistory") с такой структурой:
{
"rid": "123e",
"v": 1
},
{
"rid": "143fe",
"v": 1
},
{
"rid": "143fe",
"v": 2
},
{
"rid": "143fe",
"v": 3
},
{
"rid": "123e",
"v": 2
}
Я пишу функцию для возврата подмножества документов в этой коллекции. В настоящее время я нахожу все совпадающие элементы следующим образом:
_rHistory.Find(r => rIds.Contains(r.RId)).ToList()
Однако я хочу вернуть только элемент с самой высокой версией каждого результата, например:
{
"rid": "143fe",
"v": 3
},
{
"rid": "123e",
"v": 2
}
Как мне найти самую новую версию каждого документа, соответствующего фильтру на rid, и вернуть результат в виде списка? Я предполагаю, что задействована агрегация, но мне не удается найти подходящие примеры. Очевидно, я бы не стал этого делать:
foreach (var rId in rIds)
{
res.Add(_rHistory.Find(r => r.RId == rId).SortByDescending(f => f.Version).FirstOrDefault());
}