我有一个包含 4 个字段的数据库,如下所示:
ID DeviceId Location Date
1 A ... 2
2 A ... 1
3 B ... 2
每个
DeviceId
我想要日期最高的记录中的位置。我可以得到独特的 DeviceId
是这样的:// get all locations
var locations = Session.Query<Location>().ToList();
//Get the latest used unique deviceId's
var distinctDeviceIdsByDate = (
from loc in locations
orderby loc.DeviceId, loc.Date descending
select loc.DeviceId).Distinct().ToList();
然后我会使用 join 来获取想要的行,但这不会有任何好处,因为除了
DeviceId
之外我什么也得不到。 's,因此无法识别要选择的行。如果我尝试选择以下内容:select loc
我只能获得所有列的唯一组合的行。我确定有一个简单的解决方案,但恐怕我现在无法弄清楚。
最佳答案
我猜您必须使用 GroupBy
的某种组合和 Take
.尝试这个,
var distinctDeviceIdsByDate =
locations.OrderByDescending(location => location.DeviceId)
.ThenByDescending(location => location.Date)
.GroupBy(location => location.DeviceId)
.SelectMany(location => location.Take(1));
关于linq - 使用 LINQ 选择具有不同列值的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15364424/