如何使用OData和LINQ进行嵌套计数?

时间:2010-08-07 01:32:36

标签: linq odata

以下是我尝试从我的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()   不受支持。

尝试通过OData获取嵌套计数似乎是一个问题。这是一个什么样的解决方案?我试图避免为每个对象获取整个嵌套集合以获得计数。

谢谢!

3 个答案:

答案 0 :(得分:1)

截至今天,OData协议不支持聚合。

预测是,但预测包括聚合属性编号

亚历

答案 1 :(得分:0)

您需要.Net 4.0和In LinqPad,您可以通过netflix OData服务运行以下

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();
}

答案 2 :(得分:0)

您现在可以使用我的产品AdaptiveLINQ和扩展方法QueryByCube