代码之家  ›  专栏  ›  技术社区  ›  fletcher

从另一个列表中删除项的扩展方法

  •  1
  • fletcher  · 技术社区  · 14 年前

    我正试图基于谓词func筛选列表。我使用func过滤整个列表并返回操作的结果。然后,我需要确定哪些机器出现在完整列表中,而不是筛选列表中。

    static void Main(string[] args)
    {
        var allActions = new List<MachineAction>
                         {
                             new MachineAction
                                 { Name = "A", Status = MachineActionStatus.Cancelled },
                             new MachineAction
                                 { Name = "B", Status = MachineActionStatus.Error },
                             new MachineAction
                                 { Name = "C", Status = MachineActionStatus.Waiting }
                             };
    
         var filteredActions = allActions.Where(FilterNotCompleted);
    }
    
    private readonly static Func<MachineAction, bool> FilterNotCompleted = action =>
                                             (action.Status == MachineActionStatus.Waiting ||
                                              action.Status == MachineActionStatus.Started);
    
    public class MachineAction
    {
        public MachineActionStatus Status { get; internal set; }
        public string Name { get; internal set; }
    }
    
    internal enum MachineActionStatus
    {
        Waiting,
        Started,
        Success,
        Error,
        Cancelled
    } ;
    

    是否有一个扩展方法将完整列表与筛选列表进行比较,并返回不在两者中的列表?

    谢谢

    3 回复  |  直到 14 年前
        1
  •  2
  •   Richard Friend    14 年前

    看看 Except 延伸

        2
  •  0
  •   cRichter    14 年前
    allActions.Where(item => !filteredActions.Contains(item))
    

    但最好还是这样做

    var filteredActions = allActions.Where(item => !FilterNotCompleted(item));
    

    (注意!bevore的func命令。)

        3
  •  0
  •   Amr Badawy    14 年前
    allActions.Except(filteredActions )