Метод расширения для удаления элементов из списка, существующего в другом - PullRequest
1 голос
/ 20 июля 2010

Я пытаюсь отфильтровать список на основе предиката Func. Я использую Func, чтобы отфильтровать полный список и вернуть результат операции. Затем мне нужно определить, какие MachineActions появляются в полном списке, но не в отфильтрованном.

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 ]

2 голосов
/ 20 июля 2010

Взгляните на За исключением расширения

0 голосов
/ 20 июля 2010
allActions.Except(filteredActions )
0 голосов
/ 20 июля 2010
allActions.Where(item => !filteredActions.Contains(item))

но, возможно, лучше было бы сделать

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

(обратите внимание на! Bevore команду func.)

...