protected virtual IEnumerable<CallLogEntry> FilterLogEntries(List<CallLogEntry> entries) { IEnumerable<CallLogEntry> filtered; if(this.writeAllEntriesIfKeyFound && this.keys.Length != 0) { bool keyFound = entries.Any(entry => this.keys.Contains(entry.Key)); if(!keyFound) filtered = new CallLogEntry[0]; else filtered = entries.Where(entry => this.entryTypeFilter.IsAnyFlagOn(entry.What)); } else { filtered = from entry in entries where this.entryTypeFilter.IsAnyFlagOn(entry.What) && (this.keys.Length == 0 || this.keys.Contains(entry.Key)) select entry; } return filtered; }