2012-07-02 121 views
0

我需要這個SQL查詢轉換爲LINQ:轉換查詢LINQ

SELECT COUNT(result1.Id) AS total, 
    result1.OccurrenceDate, 
    result1.Path, 
    result1.Message, 
    result1.StackTrace 
FROM (SELECT * FROM tbllog ORDER BY OccurrenceDate DESC) AS result1 
GROUP BY result1.Path, result1.Message ORDER BY total DESC 

但我沒有得到成功。我嘗試過很多方面,沒有任何工作。 有些幫助?

+0

如果你可以添加一些你的嘗試,我們可以幫助你 – Jorge

+0

你看,我需要一羣被存儲在表tbllog一些錯誤,我只是需要採取一些特異性場(OccurrenceDate,路徑, Message和StackTrace)以及顯而易見的事件總數。 我會發布我的嘗試,只需一分鐘。 –

+0

你爲什麼要在內部查詢中訂購?除了使其更加複雜之外,它不會添加任何內容。你可以用table tbllog替換內部查詢,結果應該是相似的,這會使你的Linq查詢變得更加簡單。 – Maarten

回答

0

創建LINQ查詢出以下幾點:

SELECT * FROM tbllog ORDER BY OccurrenceDate DESC AS result1 
GROUP BY result1.Path, result1.Message ORDER BY total DESC 

一旦做到這一點,寫一些LINQ,讓您的計數。

0
var results = _dbContext.tbllog 
    .GroupBy(t => new { t.Path, t.Message }) 
    .Select(g => new 
     { 
      Total = g.Count(), 
      Path = g.Key.Path, 
      Message = g.Key.Message 
     }).OrderBy(p => p.Total); 

值得一提的是你的SQL查詢是無效的,因爲屬性OccurrenceDateStackTrace是不是在聚合函數,也沒有在GROUP BY子句,因此它是無效的查詢。與LINQ查詢相同。你應該確定你想要對他們做什麼。將它們包含在組中或使用聚合函數爲每個組選擇合適的值。

0

我不知道你的問題的上下文是什麼,但是如果你不需要修改這個查詢,以便它使用額外的參數執行,那麼我強烈建議將查詢作爲SQL來執行。這在我知道的所有ORM(實體框架,NHiberate,LINQ to SQL等)上都受支持。

埃裏克