【问题标题】:Linq Select All Items Matching ArrayLinq 选择所有匹配数组的项目
【发布时间】:2021-04-30 00:37:45
【问题描述】:

我有一个 IEnumerable<Objects.LabourHours> 类型的数据集合,其中包含各种员工的劳动记录。我希望过滤列表并仅返回选定员工的记录,该记录由包含EmployeeIDs 的int[] employees 列表指定。

class LabourHours
{
    public int ID {get;set;}
    public int EmployeeID {get;set;}
    public int HoursWorked {get;set;}
}

我该怎么做呢?我确定以前有人问过这个问题,但我在这里找不到类似的东西。我发现的最接近的方法是按 UserID 对记录进行分组,这不是我需要的 - 我需要实际的记录。

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    您可以使用Contains 方法使用LINQ Where 过滤您的列表:

    var result = list.Where(x => employees.Contains(x.EmployeeID));
    

    【讨论】:

    • 嗯,这么简单!我在网上找到的所有解决方案都是 .All() 和 .Any() 的组合,这导致了分组返回值而不是单个项目。只是我,还是与所有其他 Linq 操作相比,这是错误的方式?
    【解决方案2】:

    如果希望结果保持employees 数组的顺序,可以在数组上使用Select。从文档中,它“将序列的每个元素投影到一个新形式中”,这基本上是您在这种情况下想要做的。

    var result = employees.Select(e => labourHours.First(l => l.EmployeeID == e));
    

    如果所有employees 不一定都有关联的labourHours 条目,则使用FirstOrDefault

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-04
      • 2013-04-05
      • 2016-11-22
      • 1970-01-01
      • 2022-09-30
      • 2019-09-05
      • 1970-01-01
      相关资源
      最近更新 更多