2015-04-03 95 views
1

我有一張表,其中包含訪客瀏覽器信息,我正嘗試在分析頁面上使用。該表包含BrowserType,BrowserName和BrowserVersion。我已經建立了查詢使用本機的SQL,但我正在努力將其轉換爲LINQ。linq分組計數

這裏是我的sql查詢:

SELECT COUNT(1) AS visit, s.BrowserType, s.BrowserName, s.BrowserVersion FROM Stats s GROUP BY s.BrowserType, s.BrowserName, s.BrowserVersion; 

這給了我一個結果集,看起來像這樣:

Query Results

的統計數據表格顯然包含其他數據如日期和用戶信息,但假設我已經查詢了相關的行/對象,只需要從中獲取計數信息。如果我這樣做,我會在我的select子句中遇到錯誤:

var groupedResults = from r in results 
        group r by new { BrowserType = r.BrowserType, BrowserName = r.BrowserName, BrowserVersion = r.BrowserVersion } into g 
        select new 
        { 
         Name = g.BrowserName, 
         Version = g.BrowserVersion, 
         Count = g.Count() 
        }); 
+1

什麼錯誤??? – 2015-04-03 15:06:48

+0

'System.Linq.lGrouping 不包含'BrowserVersion'的定義,並且沒有擴展方法'BrowserVersion'接受類型'System.Linq.lGrouping '的第一個參數。你是否缺少using指令或程序集引用?)'BrowserName存在類似的錯誤。 – 2015-04-03 15:16:44

回答

0

使用我的客戶表我做了這個。這是你想要的?

var f = from c in Customer 
        .GroupBy(b=>new { b.Firstname,b.Lastname}) 
        .Select(g => new { 
          Metric = g.Key, 
          Count = g.Count() 
        }) 
     select c; 

其產生的T-SQL

SELECT COUNT(*) AS [Count], [t0].[firstname] AS [Firstname], [t0].[lastname] AS [Lastname] 
FROM [customer] AS [t0] 
GROUP BY [t0].[firstname], [t0].[lastname] 
+0

是的,這是完美的,謝謝。從那裏我可以遍歷密鑰並獲取內容。 – 2015-04-03 15:34:14

+0

@ The_Smallest給出了正確的答案 – 2015-04-03 16:19:26

1

您需要使用Key property of IGrouping接口。 利用鏈語法這將是這樣的:

var groupedResults = results 
    .GroupBy(x => new { x.BrowserType, x.BrowserName, x.BrowserVersion}) 
    .Select(x => new {x.Key.BrowserType, x.Key.BrowserName, x.Key.BrowserVersion}) 
    .ToArray(); 
0
var groupedResults = from r in results 
        group r by new { r.BrowserType, r.BrowserName,r.BrowserVersion } into g 
        select new 
        { 
         Type=g.Key.BrowserType, 
         Name = g.Key.BrowserName, 
         Version=g.Key.BrowserVersion, 
         Count=g.Count() 

        }); 

Hope it will help you