1

我有两个清单:

List<DateTime> monthWorkingDays

List<Note> monthUserNotes

在我的笔记类中,我有一个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;
    }

有什么建议么?谢谢

4

2 回答 2

3

假设您DateTime的 s 是可比较的(如果有时间部分,您可以使用DateTime.Date属性删除它),这应该可以使用 LINQ 的Except

var incompleteDays = days.Except(
         GetLast30DaysNotesByUser(idUser).Select(a => a.NoteDate));
于 2013-08-02T18:07:24.210 回答
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);
于 2013-08-02T18:08:21.513 回答