2014-11-06 114 views
0

我正在使用WCF休息服務,我想返回總記錄數,就像我們在webapi或微風中有inlinecount一樣。返回記錄總數

我的WCF方法是

[WebGet(UriTemplate = "GiveMeNamesOfStudents", ResponseFormat = WebMessageFormat.Json)] 
    public List<MyDataClass> GiveMeNamesOfStudentsList() 
    { 
     var returnData = (from myentity in myEntityRepository.AsQueryable() 
          select new MyDataClass 
          { 
           Id = myentity.Id, 
           Name = myentity.Name 
          }).Skip(PageSize * PageNo).Take(PageSize).ToList(); 
     return returnData; 
    } 

我怎麼能一起回到我的實際數據的記錄總數與數據?

+0

您想返回與實際分頁數據一起發現的總記錄數? – haim770 2014-11-06 12:18:50

+0

你的問題是什麼?計算列表中的元素?爲每個包含集合的外發郵件添加「總記錄數」屬性? – CodeCaster 2014-11-06 12:20:16

+0

@ haim770是的,我想返回我的實際數據 – Happy 2014-11-06 12:21:48

回答

4

我建議返回包含您的清單和總數的DTO

您可以添加其他信息,例如頁數,但我會在這裏保持簡單。

首先創建您的通用DTO,以便您也可以在其他方法中使用它。

public class ListResult<T> 
{ 
    public List<T> Data { get; set; } 
    public int TotalCount { get; set; } 
    public int Page{ get; set; } 
} 

現在返回對象

[WebGet(UriTemplate = "GiveMeNamesOfStudents", ResponseFormat = WebMessageFormat.Json)] 
public ListResult<MyDataClass> GiveMeNamesOfStudentsList() 
{ 
    var returnData = (from myentity in myEntityRepository.AsQueryable() 
         select new MyDataClass 
         { 
          Id = myentity.Id, 
          Name = myentity.Name 
         }).Skip(PageSize * PageNo).Take(PageSize).ToList(); 

    return new ListResult<MyDataClass> 
         { 
          Data = returnData, 
          TotalCount = myEntityRepository.Count(), 
          Page = PageNo 
         }; 
} 
+0

我正在嘗試.Skip(PageSize * PageNo).Take(PageSize).ToList()。count()但它不起作用 – Happy 2014-11-06 12:19:40

+0

稱爲Count()的方法不count()。它現在工作嗎? – dknaack 2014-11-06 12:20:31

+0

@dknaack,你的'Count()'只返回頁面大小。 – haim770 2014-11-06 12:21:06

3

你要做的查詢數據庫兩次;一旦沒有.Skip.Take,要獲得總數,然後再用.Skip.Take運行相同的查詢以獲取數據頁面。

var returnData = (from myentity in myEntityRepository.AsQueryable() 
         select new MyDataClass 
         { 
          Id = myentity.Id, 
          Name = myentity.Name 
         }).Skip(PageSize * PageNo).Take(PageSize).ToList(); 

    var totalCount = myEntityRepository.myentity.count(); 

另一種選擇是不使用EF,而是隻需要調用,可以同時運行查詢和輸出參數返回兩個值的存儲過程。這仍然會運行2個查詢,但只會使用1個調用frm您的應用程序到數據庫而不是2.

+0

以及如何返回此totalCount變量在我的返回列表中 – Happy 2014-11-06 12:23:57

+0

而是返回一個容器對象。像'class PageResult {public List Data {get;組; }; public int Count {get;組; }} – CodingWithSpike 2014-11-06 12:26:57

2

因爲您的方法的返回類型是List<MyDataClass>,所以不能返回任何其他內容。你需要引入一個DTO,它將返回你的實體和計數:

public class MyDataClassDTO 
{ 
    public List<MyDataClass> Data { get; set; } 
    public int TotalRecordCount { get; set; } 
} 

並返回。