【问题标题】:How to do a nested count with OData and LINQ?如何使用 OData 和 LINQ 进行嵌套计数?
【发布时间】:2014-09-02 03:24:39
【问题描述】:

这是我试图从我的 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 获取嵌套计数似乎是一个问题。有什么办法解决这个问题?我试图避免获取每个对象的整个嵌套集合只是为了计数。

谢谢!

【问题讨论】:

    标签: linq odata


    【解决方案1】:

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

    预测是的,但包括聚合属性的预测没有。

    亚历克斯

    【讨论】:

      【解决方案2】:

      您需要 .Net 4.0 和在 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();
      }
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-09-01
          • 2011-02-10
          • 1970-01-01
          • 1970-01-01
          • 2014-01-18
          • 1970-01-01
          • 2016-08-08
          • 2020-07-21
          相关资源
          最近更新 更多