我有以下查询返回给定日期每天的登录计数.
var sot = from uts in DataContext.UserTrackingStatistics
let startDate = new DateTime(2009, 10, 01)
where uts.LastLogin >= startDate
group uts by uts.LastLogin.Date into myGroup
orderby myGroup.Key.Date
select new { Count = myGroup.Count() , myGroup.Key.Date};
Run Code Online (Sandbox Code Playgroud)
我希望这可以说一天的计数是0,而不是没有返回任何东西.我怎么能在这个查询中做到这一点?
你不能只使用LINQ-to-SQL,因为你必须union在查询中使用实际上不存在的数据,LINQ-to-SQL不能这样做.
要做到这一点,您需要填写客户端的空白.我现在不在VS面前,但一般的做法是:
Enumerable.Range创建的数字从0到您的日期范围内的天数列表,然后使用Select变换该列表为日期的列表.使用匿名类型选择结果,并使用与L2S语句相同的属性; 这样,编译器将重用相同的类型Date属性上使用外连接(不幸的是LINQ中最明显的语法)将列表组合在一起现在,这将显示0的差距.
我将尝试在下面发布一个代码示例,但请注意我无法编译我所在的位置,因此可能需要调整.
var allDates = Enumerable.Range(0, (DateTime.Today - startDate).TotalDays)
.Select(i => new { Count = 0, Date = startDate.AddDays(i) });
var fullResults = from d in allDates
join r in results on d.Date == r.Date
from oj in r.DefaultIfEmpty()
select new { Count = oj == null ? 0 : oj.Count, Date = d.Date };
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
511 次 |
| 最近记录: |