2014-11-06 3 views
0

Я использую службу отдыха WCF, и я хочу вернуть общее количество записей так же, как у нас есть inlinecount в webapi или бриз.возвращение всего кол-во записей

Мой метод в ФОС

[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

+0

Что вы думаете? Считать элементы в списке? Добавить свойство «total record count» для каждого исходящего сообщения, содержащего коллекцию? – CodeCaster

+0

@ haim770 да, я хочу вернуть количество моих фактических данных – Happy

ответ

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

+0

Метод Count() not count(). Он работает сейчас? – dknaack

+0

@dknaack, ваш 'Count()' будет только возвращать размер страницы. – haim770

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

+0

вместо этого возвратить объект-контейнер. Что-то вроде 'class PageResult {public List Данные {get; задавать; }; public int Count {get; задавать; }} ' – CodingWithSpike

2

Так как тип возвращаемого метода - List<MyDataClass>, вы ничего не можете вернуть. Вам необходимо ввести DTO, который возвращает ваши сущности вместе со счетом:

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

И верните это.

Смежные вопросы