LINQ 获取最新条目

本文关键字:最新 获取 LINQ | 更新日期: 2023-09-27 17:55:48

我对 LINQ 相当陌生,所以对于你们中的一些人来说,这可能是一个简单的解决方案。我已经扯掉头发已经有一段时间了:)

场景:我有一个盒子,里面有 3 个具有不同端口的硬件模块。使用串行通信,我将模块中的数据提取到名为 CurrentData_Tables 的 SQL 表中因此,每次生产一个单位时,我的程序都会在表中写入一个条目,说明总和有多大。让我尝试解释一下数据。

BoxID, ModuleID, PortNumber, Value,       Time
1,     0A,       1,          {Value},     {Date}

该特定模块的读数上的时间完全相同,因此我想象我可以按常量的数据分组,然后获取最新数据。这是我到目前为止所拥有的:

SQLdbDataContext sqlDB = new SQLdbDataContext();
BindingSource bs = new BindingSource();
var Latest = from q in sqlDB.CurrentData_Tabels
             group q by new
             {
                 q.BoxID,
                 q.ModuleID,
                 q.PortNumber,
                 q.Time
             }
             into groupOrder
             select new
             {
                 BoxID = groupOrder.Key.BoxID,
                 ModuleID = groupOrder.Key.ModuleID,
                 Portnumber = groupOrder.Key.PortNumber,
                 Time = groupOrder.Key.Time
             };

这很好,因为我得到了我想要的所有结果,甚至更多。我不需要知道模块 0A、端口 1 上的读数在最新条目 3 之前已计为 2。这有意义吗?如果没有,请让我尝试再次解释。

做一个>来获得最大的总和是行不通的,因为我也有触发布尔值的状态。一个表示机器上有警报,零表示一切正常。

我很抱歉双重帖子。无论出于何种原因,我的临时帐户都被锁定了,我无法对我的旧帖子发表评论。现在我已经注册了,希望能够提供更多信息。

@Jon Skeet,这是模块 2B 上具有 0 个活动端口的设置,想象一下模块 0B 端口 1 上有一个警报处于活动状态,那么即使问题已解决,我仍然会显示过时的数据。

https://i.stack.imgur.com/oX1ZK.jpg

以下是我的客户端的外观:

https://i.stack.imgur.com/stBXY.jpg

显然,我只想显示最新的数据。我希望这能消除混乱。


我似乎已经解决了自己的问题,但效率低下。

SQLdbDataContext sqlDB = new SQLdbDataContext();
                    var LatestObjects = (from q in sqlDB.CurrentData_Tabels select q).OrderByDescending(x => x.Time).First();
                    var selectedobjects = from q in sqlDB.CurrentData_Tabels
                                          where q.Time == LatestObjects.Time
                                          select q;

                    dgvLiveData.DataSource = selectedobjects;
                    dgvLiveData.RowHeadersVisible = false;  

通过组合 2 个查询,我得到了我想要的。我相信这可以通过一个查询来解决,但我远不是一个铁杆程序员,可以解决这个问题。

LINQ 获取最新条目

你在那里所做的是正确的。 您可以通过在代码中将 latestquery 的语句作为子查询来在一个查询中编写它,但它没有任何不同。在代码中将查询设置为 LatestQuery 时,不会对服务器执行任何操作。实际提取是在使用查询中的数据时完成的。

例:

  var q = dc.Mytable.Where(e=>e.id > 5);    // q is IQueryable, no fetch to db is executed yet
  q = q.Where(e=> e.name.StartWith("a"));   // q is still IQueryable and no fetch yet too
  var list = q.List();   // Fetching of data to the db happens here