我有一个通用对象表,其中每个条目都有一个键和版本。所以你可能有
Object 1, version 1
Object 1, version 2
Object 1, version 3
Object 2, version 1
Object 2, version 2
如何请求返回每个对象的最高版本,即返回对象1的版本3和对象2的版本2?我不知道如何使用 Distinct 查询,因为对象不匹配,它们有不同的版本,我想要每个对象的最高版本号
到目前为止这是我的查询
var dbObjects = _objectStoreRepository.GetDataObjects().OrderByDescending(d => d.Version).Where(d =>
d.ObjectKey.ToLower().Contains(objectKey) &&
((d.Status.ToLower() == request.Status.ToLower()) || string.IsNullOrEmpty(request.Status)) &&
d.CreatedAt <= request.AsAtTime).ToList();
但这会返回每个匹配对象的所有版本,而不仅仅是最高版本
你会想要使用 .GroupBy选择:
var results = _objectStoreRepository
.GetDataObjects()
.Where(d
=> d.ObjectKey.ToLower().Contains(objectKey)
&& ((d.Status.ToLower() == request.Status.ToLower()) || string.IsNullOrEmpty(request.Status))
&& d.CreatedAt <= request.AsAtTime)
.GroupBy(o => o.ObjectKey)
.Select(g => g.OrderBy(x => x.Version).LastOrDefault())
.ToList();
首先,您按公共(public)“键”对结果进行分组,然后在对这些结果进行分组后,我们按版本对该组内的结果进行排序,并采用最后一个或默认值。您可能需要更改 Select/OrderBy 以适合您的确切数据。
我是一名优秀的程序员,十分优秀!