2010-08-03 123 views
2

我想按类别ID分组,然后对此进行计数。但我不知道该怎么做。我尝试了几种方法,但都没有成功。这里是我的最新消息:linq计数/ groupby不工作

public class Count 
{ 
    public int TradersCount { get; set; } 
    public int Id { get; set; } 
    public string Description { get; set; }  
} 


    public IQueryable<Count> CountTradersAttachedToCategories() 
    { 
     var data = from tc in _db.tblTradersCategories 
        select new Count 
        { 

         Description = tc.tblCategory.description, 
         Id = tc.tblCategory.categoryId, 
         TradersCount = tc.Select(x => x.categoryid).GroupBy().Count() 

        }; 

     return data; 
    } 
  • tblTradersCategories使两 tblTraders/tblCategories
  • 单个交易者可以有很多种类
  • 一个类别可以有许多交易商提前

谢谢寻求帮助。

克莱尔

回答

6

试试这个:

var data = from tc in _db.tblTradersCategories 
      group tc by new { tc.tblCategory.categoryId, 
          tc.tblCategory.description } into g 
      select new { Count = g.Count(), 
         Id = g.Key.categoryId, 
         Description = g.Key.description }; 

如果你想在你的Count类,你可能需要使用AsEnumerable()执行过程中的转换:

var converted = data.AsEnumerable() 
        .Select(c => new Count { TradersCount = c.Count, 
              Id = c.Id, 
              Description = c.Description }); 

您可以试试一口气做完他们:

var data = from tc in _db.tblTradersCategories 
      group tc by new { tc.tblCategory.categoryId, 
          tc.tblCategory.description } into g 
      select new Count { TradersCount = g.Count,() 
           Id = g.Key.categoryId, 
           Description = g.Key.description }; 

但我不知道这是否可行。这取决于LINQ提供程序如何处理它。

+0

感谢Jon,工作起来像个待客:-) – ClareBear 2010-08-03 10:08:14

+0

当然,类Count的属性和匿名类的属性一样容易填充。我不同意需要使用AsEnumerable。 – 2010-08-03 14:39:15

+0

@大卫乙:问题是,我不知道LINQ提供商如何处理尝试创建非匿名,非实体类型。将编辑到答案。 – 2010-08-03 14:46:49