我试图每周返回一天的记录数。我的代码只返回有记录的那天的记录,如果那天没有插入记录,我想返回0。以下是我的代码。
//所需结果太阳到周六= [0,3,5,1,0,18,0],目前我只得到[3,5,1,18] // DateTime.Now.FirstDayOfWeek()是返回一周中第一天的扩展方法。谢谢你的帮助。
var records = logs.Where(x=>x.date> DateTime.Now.FirstDayOfWeek())
.GroupBy(x => x.date.Day)
.Select(x =>
x.Any()?x.Count():0
).ToArray();
答案 0 :(得分:1)
我不确定这个解决方案是否有效,但只是尝试一下,只需要用静态列表做左外连接,下面只是片段(伪代码)怎么做。
List<String> weekdays = new List<String>();
weekdays.Add("Monday");
weekdays.Add("Tuesday");
...
...
...
//Left outer join to display forcibly all weekdays and join them with your log's data and continue to grouping.
var result = from w in weekdays
join l in logs into joined
from j in joined.DefaultIfEmpty()
如果它不起作用,请发表评论,因为我有另一个解决方案让你可以使用:)
如果不起作用,请检查,在返回结果后,将结果(记录)加入您的静态数据(工作日),这意味着您已经仅返回其计数具有数据(> 0)的记录,但仅对于那些根本没有数据的记录,它应该在连接后变为零。
var result = from w in weekdays
join l in records into joined
from j in joined.DefaultIfEmpty()
答案 1 :(得分:1)
您无法加入<html>
<body>
<div style="float:left"><h1 class="vertical-text-right spaced-text"> <a href="#">Right Text</a></h1></div>
<div style="float:left"><h1 class="vertical-text-left spaced-text"> <a href="#">Left Text</a></h1></div>
<center><div class="text-center"><h1 class="spaced-text text-center"> <a href="#"> Top Text</a></h1></div>
</center>
<div style="width:100%; height: 100px;">
<center><i>Some other content</i></center></div>
<center><div class="text-center"><h1 class="spaced-text text-center"> <a href="#">Bottom Text</a></h1></div>
</center>
</body>
</html>
和List
,因为Linq to Entities无法将DbSet
翻译为SQL语言。所以,似乎除了在循环中填补空白日期之外没有其他选择;
List
答案 2 :(得分:1)
使用其他扩展方法创建一系列日期:
public static IEnumerable<DateTime> Range(this DateTime startDate, int numberOfDays) => Enumerable.Range(0, numberOfDays).Select(e => startDate.AddDays(e));
您可以GroupJoin
使用一周的日期并创建数组:
var recordgroups = logs.Where(x => x.date > DateTime.Now.FirstDayOfWeek())
.GroupBy(x => x.date.Day);
var records = DateTime.Now.FirstDayOfWeek().Range(7)
.GroupJoin(recordgroups, wd => wd.Day, lg => lg.Key, (_, lg) => lg.Any() ? lg.First().Count() : 0).ToArray();