繁体   English   中英

如何在Entity Linq to SQL中获得唯一列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM