我有两个清单:
List<DateTime> monthWorkingDays
List<Note> monthUserNotes
在我的Note课程中,我有一个 DateTime NoteDate 属性(代表注释日期)。
我需要检查用户是否在一个工作日内没有发送任何通知给该用户发送电子邮件。
所以我必须将 NoteDate 属性与 monthWorkingDays 数据进行比较。
public List<DateTime> GetIncompleteDays()
{
var days = GetWorkingDays();
var incompleteDays = new List<DateTime>();
var notes = GetLast30DaysNotesByUser(idUser).OrderBy(a => a.NoteDate);
foreach (var note in notes)
{
//TODO
}
return incompleteDays;
}
有什么建议吗? 感谢
答案 0 :(得分:3)
假设您的DateTime
具有可比性(如果有时间部分,您可以使用DateTime.Date
属性删除它),这应该可行,使用LINQ的Except
:
var incompleteDays = days.Except(
GetLast30DaysNotesByUser(idUser).Select(a => a.NoteDate));
答案 1 :(得分:1)
不要按日期对笔记进行排序 - 而是选择不完整的日期:
days.Select(d => d.Date)
.Except(notes.Select(n => n.NoteDate))
.OrderBy(d => d)
正如蒂姆所说,如果几天没有时间部分,你可能不需要选择d => d.Date
。考虑引入一些解释变量,以使解决方案更加清晰:
var workingDays = GetWorkingDays();
var notes = GetLast30DaysNotesByUser(idUser);
var daysWithNotes = notes.Select(n => n.NoteDate).Distinct();
var incompleteDays = workingDays.Except(daysWithNotes);