LINQ获取最新条目

时间:2011-05-09 09:36:07

标签: c# sql linq datagridview group-by

我对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。 那有意义吗?如果没有,请让我再试一次。

做一个>得到最大的金额是行不通的,因为我也有触发bool值的状态。一个意味着机器上有一个报警,零表示一切正常。

我很抱歉这篇双职位。无论出于何种原因,我的临时帐户被锁定,我无法评论我的旧帖子。现在我已注册,希望能够提供更多信息。

@Jon Skeet,这是模块0B上有2个活动端口的设置,想象一下模块0B端口1上有一个激活的报警,然后即使问题已经解决,我仍然会显示过时的数据。 / p>

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

以下是我对客户端的看法:

http://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个查询,我得到了我想要的东西。我确信这可以通过一个查询来解决,但我还远远不能成为一个能够解决这个问题的核心程序员。

1 个答案:

答案 0 :(得分:1)

你所做的是正确的。您可以通过在代码中将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