[英]How to get a distinct, case-insensitive list using Linq and Entity Framework
[英]How to get a distinct list in Entity Linq to SQL
我有一个通用对象表,其中每个条目都有一个键和版本。 所以你可能有
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与Select一起使用:
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();
首先,将结果按通用的“关键字”分组,然后将结果分组,然后按版本在该组中对结果进行排序,并采用最后一个或默认值。 您可能需要更改Select / OrderBy以适合您的确切数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.