2010-08-03 82 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