2013-11-04 27 views
1

我想從以下數據來獲得在SQL數據庫重複計數x和分組的日期Y

date     | user | 
(DateTime)    | (string)| 
-------------------------------------------------- 
2013-06-03 13:24:54.013 |  3  | 
2013-06-04 13:25:54.013 |  5  | 
2013-06-04 13:26:54.013 |  3  | 
2013-06-04 13:27:54.013 |  3  | 

列表形式

date  | DistinctCountUser 
--------------------------------- 
2013-06-03 | 1 
2013-06-04 | 2 

我試過幾種方法用linq做到這一點,但總是以a)不是我期望的結果或b)linq異常。

+1

您是否使用Linq到SQL或EF? –

+2

你可以在幾種方式中顯示幾個(或者只是一個)嗎? – musefan

+0

對不起,我正在使用Linq to Entities。 – peter

回答

2

如果您正在使用實體框架,那麼你應該使用EntityFunctions.TruncateTime獲取日期時間字段的日期部分:

from x in context.TableName 
group x by EntityFunctions.TruncateTime(x.date) into g 
select new { 
    date = g.Key, 
    DistinctCountUser = g.Select(x => x.user).Distinct().Count() 
} 

否則使用@KingKong答案

+0

您使用的'Distinct'看起來像'DistinctBy'? –

+0

@KingKing yeap,謝謝。你是對的 –

+0

非常感謝! – peter

3
var result = input.GroupBy(x=>x.date.Date,(key,x)=> new { 
         date = key, 
         DistinctCountUser = x.Select(e=>e.user).Distinct().Count() 
        }); 
+1

是的,不幸的是,默認的EF提供不能翻譯Date屬性獲取。但是,對於舊的Linq來說,這完全可以使用SQL –

1

這裏是如何使用查詢在Linq中分組時的表達。查詢表達式在某些情況下可能更容易閱讀,我發現分組是其中之一。

from thing in things 
group thing by thing.date.Date into g 
select new { 
    Date = g.Key, 
    DistinctCountUser = g.Select(x => x.user).Distinct().Count() 
}