Этот код работает, но неэффективен, потому что он дважды ищет словарь ignored
. Как я могу использовать метод словаря TryGetValue()
в операторе LINQ, чтобы сделать его более эффективным?Использование TryGetValue() в LINQ?
IDictionary<int, DateTime> records = ...
IDictionary<int, ISet<DateTime>> ignored = ...
var result = from r in records
where !ignored.ContainsKey(r.Key) ||
!ignored[r.Key].Contains(r.Value)
select r;
Проблема заключается в том, что я не уверен, как объявить переменную в инструкции LINQ для использования для параметра out.
Это работает. Я предполагаю, что вы оцениваете его, пока переменная все еще находится в области видимости, и не пытайтесь использовать ее с параллельным LINQ. –
@Joe, точно ... это имело бы непредсказуемые эффекты –