2012-08-30 63 views
0

我試圖找到我的問題的答案,但我不能。 我有ID,WorkerID,Function(int)和DateTime表。每個工人每天都有多個記錄。對於所有工作人員,我只需要每天獲得第一筆記錄。 該查詢給出的結果,我想:SQL/LINQ選擇所有與2列組

SELECT WorkerID, MIN(DateTime) AS DateTime 
FROM Records 
GROUP BY WorkerID, LEFT(DateTime, 10) 
ORDER BY WorkerID 

但我想選擇所有的列(ID,WorkerID,功能和日期時間)。我怎樣才能做到這一點? 此外,我需要這個查詢ASP.NET MVC3應用程序,所以如果任何人都可以在LINQ中爲我寫這個,並解釋如何將該查詢轉換爲IEnumerable(Record)或IQuerible(Record),我會非常感激。 在此先感謝你們,希望你能拯救我。

編輯:您的LINQ查詢工作,但我有很多關於性能的問題,因爲使用了很多視圖,而不是表。現在我切換到Table,我想直接在Table上查詢。結構是一樣的,而不是WorkerID,我有ETAG,這是相同的。但我現在有問題。上面提到的SQL查詢給了我大約50k的結果,這是正確的,但是現在你的LINQ查詢只給了我9k,所以有些錯誤。下面是查詢:

from d in Records 
group d by new { d.ETAG, Date = d.DateTime.Value.Year + d.DateTime.Value.Month +   d.DateTime.Value.Day } into g 
orderby g.Key.ETAG 
select g.OrderBy(e => e.DateTime).FirstOrDefault() 

請,你能不能幫我這一個...

回答

1
from r in Records 
group r by new { WorkerId = r.WorkerId, Date = r.DateTime.Value.Date } into g 
orderby g.Key.WorkerId 
select g.OrderBy(e => e.DateTime).First() 

更新:添加orderby條款,並使用g.OrderBy()執行選擇的第一條記錄的每一天而不是該組中的任意元素。

+0

我得到這個「LINQ to Entities不支持指定的類型成員'Date',只支持初始化器,實體成員和實體導航屬性。 – dodjavola

+0

這可能會幫助你http://stackoverflow.com/questions/7083871/date-is-not-supported-in-linq-to-entities-only-initializers-entity-members –

+0

它與Date = d.DateTime一起工作。 Value.Year + d.DateTime.Value.Month + d.DateTime.Value.Day,但它速度很慢,大約需要20秒來處理10k行,而表格大約有130k:/ – dodjavola