Как сделать вложенный подсчет с OData и LINQ? - PullRequest
1 голос
/ 07 августа 2010

Вот запрос, который я пытаюсь запустить из моего источника OData:

var query = from j in _auditService.AuditJobs.IncludeTotalCount()
   orderby j.Description
   select new 
      {
         JobId = j.ID,
         Description = j.Description,
         SubscriberCount = j.JobRuns.Count()
      };

Он отлично работает, если я не использую j.JobRuns.Count (), но если я его включаю, яполучить следующую ошибку:

Создание или инициализация экземпляров типа <> f__AnonymousType1`3 [System.Int32, System.String, System.Int32] с выражением j.JobRuns.Count () isне поддерживается.

Кажется, проблема в попытке получить вложенный счетчик через OData.Какой обходной путь для этого?Я пытался избежать получения всей вложенной коллекции для каждого объекта просто для подсчета.

Спасибо!

Ответы [ 3 ]

1 голос
/ 11 августа 2010

На сегодняшний день протокол OData не поддерживает агрегаты.

Прогнозы да, но прогнозы, которые включают свойства агрегатов, нет.

Alex

0 голосов
/ 01 сентября 2014

Теперь вы можете использовать мой продукт AdaptiveLINQ и метод расширения QueryByCube.

0 голосов
/ 12 августа 2010

Вам нужен .Net 4.0, а в LinqPad вы можете запускать следующие через netflix OData Service

void Main()
{
    ShowPeopleWithAwards();
    ShowTitles();
}

// Define other methods and classes here
public void ShowPeopleWithAwards()
{
    var people = from p in People.Expand("Awards").AsEnumerable()
            where p.Awards.Count > 0
            orderby p.Name
            select new
            {
              p.Id,
                    p.Name,
              AwardCount = p.Awards.Count,
             TotalAwards = p.Awards.OrderBy (a => a.Type).Select (b => new { b.Type, b.Year} )
                 };

    people.Dump();
}

public void ShowTitles()
{
    var titles = from t in Titles.Expand("Awards").AsEnumerable()
            where t.ShortName != string.Empty && 
                  t.ShortSynopsis != string.Empty &&
             t.Awards.Count > 0
            select t;
    titles.Dump();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...