linq - 使用 LINQ 选择具有不同列值的所有行

标签 linq nhibernate

我有一个包含 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/

相关文章:

C# linq to xml,带属性的嵌套查询

nhibernate - 从 NHibernate 的一级缓存中删除已删除的项目?或者: how to check if cached items have been deleted?

c# - LINQ 与 C# 中的相交方法

c# - 对具有各种数据类型的委托(delegate)进行排序

c# - EF LINQ ToList 非常慢

unit-testing - 如何使用NHibernate有效地进行TDD?

nHibernate 复合键类类型不匹配

NHibernate HiLo 生成和 SQL 2005/8 模式

nhibernate - NHibernate用于企业应用程序?

c# - 使用 Entity Framework 的 SqlBulkCopy(和更新)