Я пытаюсь отфильтровать список на основе предиката 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
} ;
Существует ли дополнительный метод, который сравнит полный список с фильтрованным списком и возвратит тех, которые не в обоих?
Спасибо
allActions.Where(item => !filteredActions.Contains(item))
но, может быть, лучше было бы сделать
var filteredActions = allActions.Where(item => !FilterNotCompleted(item));
(обратите внимание на команду! Bevore the func.)