Linq не предназначен для улучшения производительности .Он предназначен для улучшения эффективности кодирования .В некоторых случаях он может быть более производительным, чем циклы bad (например, когда вы ищете наличие элемента, Any
остановится, когда элемент будет найден, но плохой цикл может продолжить цикл), но в целом это не улучшит производительность.
Так что используйте то, что вы понимаете лучше (ИМХО, где делегат, который вы используете, гораздо сложнее понять) и используйте Linq для улучшения читабельности.
Если у вас выявлена проблема с производительностью, найдите хорошего профилировщика, чтобы определить, где больше всего времени тратится.Я был бы удивлен, если бы методы Linq на самом деле были узким местом.
Тем не менее, вы могли бы также структурировать запрос следующим образом:
var reslutList = KeysCollection.Where(key => SomeCondition(key))
.Where(key => AnotherCondition(CreateAnotherKey(key)))
.Select(key => new MyItemWrapper { Id = key })
.ToList();
Какой может быть проще для понимания, чем цикл или пользовательский делегат.