2011-05-09 91 views
1

我對LINQ相當陌生,所以對於你們中的一些人來說這可能是一件容易的事情,但我現在已經把我的頭髮拉長了很長時間:)LINQ group by,得到最新結果

場景: 我有一個包含3個具有不同端口的硬件模塊的包裝盒。 使用串行通信,我從模塊中提取數據到一個名爲CurrentData_Tables的SQL表中。 因此,每當一個單元產生時,我的程序就會在表中寫入一個條目,說明總和有多大。 讓我試着想象它。

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

的時間是excatly上的讀數爲特定模塊一樣的,所以我想象我由是恆定的,然後就獲得最新的數據能集團。 這是我得到了這麼遠:

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值的狀態,1表示機器上存在報警,0表示一切正常!

+0

什麼纔算「最新」?如果我們假設數據庫中的數據可以以任意順序返回,我們應該如何知道使用哪個值? – 2011-05-09 08:47:53

+0

帶有最新日期戳的那些。 – Simon 2011-05-09 08:52:03

+0

哪個是日期標記?時間字段?因爲你已經被分組......這不清楚發生了什麼事情。如果你可以用更多的行給出一些示例數據,以及你想要的結果是什麼,那真的會有所幫助。 – 2011-05-09 08:55:50

回答

1

我想你需要從組表達式中刪除時間字段,並在選擇新的時候使用Max。