2013-07-01 267 views
0

如何獲得總行數&來自以下查詢的記錄?實體框架SQL查詢

Contracts cont = db.contracts.SqlQuery("SELECT TOP (20) * 
    FROM (SELECT 
      ROW_NUMBER() OVER (ORDER BY dbo.Contracts.expDate desc) As RowID, 
      dbo.Contracts.*, 
      TotalRows=COUNT(*) OVER() 
     FROM dbo.Contracts 
     Where dbo.Contracts.cancelled = 1) as temp 
    WHERE temp.RowID >" + 20).ToList(); 

我得到的記錄,但不知道如何獲得總行數。 可以任何機構建議最好的方法來獲得總行數&上述查詢記錄?

回答

2

您的代碼不起作用,因爲您要返回合同和計數列表,但您只是將其分配給合同。您需要投影到匿名類型,或者創建一個自定義類型以投影到包含計數和合同集合的自定義類型。

爲什麼你堅持使用sql查詢?這應該做同樣的事情。

var contracts = (from x in db.contacts where x.cancelled == 1 
       orderby x.expDate descending 
       select new { Count=x.Count(), Records=x.Skip(20).Take(20) }).ToList(); 

除非你想總的行沒有where子句,在這種情況下,這將是:

var contracts = (from x in db.contacts orderby x.expDate descending 
       select new { Count=x.Count(), 
        Records=x.Where(y => y.canceled == 1).Skip(20).Take(20) }).ToList(); 
+0

這一個得到錯誤,我認爲我們需要修改上面的.. – Mukarram

+1

@ user2254395 - 「得到錯誤「不起作用。由於我無法訪問您的實際源代碼,因此無法知道對象的真實名稱及其屬性。您必須弄清楚,因爲您可以訪問代碼。 –