c# - LINQ:获取不在记录中的项目 - C#

标签 c# linq ienumerable enumerable

这是我的 POST 的扩展问题

class EmployeeSchedule
{
   public int Id { get; set; }
   public string Name { get; set; }
   public DateTime WorkDate { get; set; }
   public bool isOff { get; set; }
}

现在在这种情况下,我想从列表中找到 IdWorkDate 未在 4/12/2016 中找到我的标准。

List<Staff> workers = new List<Staff>()
{
    new Staff { Id = 1, Name = "Emp 1", WorkDate = Convert.ToDateTime("4/11/2016"), IsOff = false},
    new Staff { Id = 1, Name = "Emp 1", WorkDate = Convert.ToDateTime("4/12/2016"), IsOff = false},
    new Staff { Id = 1, Name = "Emp 1", WorkDate = Convert.ToDateTime("4/13/2016"), IsOff = false},
    new Staff { Id = 1, Name = "Emp 1", WorkDate = Convert.ToDateTime("4/14/2016"), IsOff = false},
    new Staff { Id = 1, Name = "Emp 1", WorkDate = Convert.ToDateTime("4/15/2016"), IsOff = false},
    new Staff { Id = 1, Name = "Emp 1", WorkDate = Convert.ToDateTime("4/16/2016"), IsOff = false},
    new Staff { Id = 1, Name = "Emp 1", WorkDate = Convert.ToDateTime("4/17/2016"), IsOff = false},
    new Staff { Id = 2, Name = "Emp 2", WorkDate = Convert.ToDateTime("4/11/2016"), IsOff = false},
    // new Staff { Id = 2, Name = "Emp 2", WorkDate = Convert.ToDateTime("4/12/2016"), IsOff = false},
    new Staff { Id = 2, Name = "Emp 2", WorkDate = Convert.ToDateTime("4/13/2016"), IsOff = false},
    new Staff { Id = 2, Name = "Emp 2", WorkDate = Convert.ToDateTime("4/14/2016"), IsOff = false},
    new Staff { Id = 2, Name = "Emp 2", WorkDate = Convert.ToDateTime("4/15/2016"), IsOff = false},
    new Staff { Id = 2, Name = "Emp 2", WorkDate = Convert.ToDateTime("4/16/2016"), IsOff = false},
    new Staff { Id = 2, Name = "Emp 2", WorkDate = Convert.ToDateTime("4/17/2016"), IsOff = false},
};

到目前为止我已经尝试过这段代码:

var notInDate = workers.Where(x => !workers.Any(y => Convert.ToDateTime("4/12/2016") != x.WorkDate));

foreach (var item in notInDate)
{
    Console.WriteLine(item.Id + " " + item.WorkDate.Date);
}

输出为:ID :1 WorkDate: 4/12/2016 12:00:00 AM

这个输出是这样的:

var notInDate = workers.Where(x => workers.Any(y => Convert.ToDateTime("4/12/2016") != x.WorkDate));

ID :1 WorkDate: 4/11/2016 12:00:00 AM
ID :1 WorkDate: 4/13/2016 12:00:00 AM
ID :1 WorkDate: 4/14/2016 12:00:00 AM
ID :1 WorkDate: 4/15/2016 12:00:00 AM
ID :1 WorkDate: 4/16/2016 12:00:00 AM
ID :1 WorkDate: 4/17/2016 12:00:00 AM
ID :2 WorkDate: 4/11/2016 12:00:00 AM
ID :2 WorkDate: 4/13/2016 12:00:00 AM
ID :2 WorkDate: 4/14/2016 12:00:00 AM
ID :2 WorkDate: 4/15/2016 12:00:00 AM
ID :2 WorkDate: 4/16/2016 12:00:00 AM
ID :2 WorkDate: 4/17/2016 12:00:00 AM

第二个例子只是删除了 WorkDate is 4/12/2016

的记录

我想得到 whose Id = 2 因为 Id 没有 4/12/2016 的 WorkDate

最佳答案

如果您想要当天没有工作的人的所有条目,您需要按 id 分组(以获取每个人的组)并过滤不包含日期的个别组。类似的东西;

var notInDate = 
         // Create a group per employee
  workers.GroupBy (x => x.Id)
         // Keep only groups that didn't work
         .Where (x => !x.Any (y => y.WorkDate == Convert.ToDateTime ("4/12/2016")))
         // Get only the key for each group
         .Select (x => x.Key);

关于c# - LINQ:获取不在记录中的项目 - C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36588285/

相关文章:

c# - SmartEnumerable 和 Regex.Matches

c# - "comment out selected lines"工具栏按钮在 Visual Studio 2010 中被禁用

c# - 难看的字体渲染

c# - 展开结果 View 将枚举 IEnumerable

c# - 加入不同对象的列表

linq - 使用 Linq 过滤不同的选项和最新日期

c# - 3个IEnumerables到1个元组

c# - WPF 拼写检查语言

c# - LINQ to Entities 无法识别方法 'System.TimeSpan Subtract(System.DateTime)' 方法

C# WPF Linq Join 4 个表和具有不同参数的Where