Попробуйте:
= from g in lstGroupings.OfType<GroupingNNA>()
это пропустит любые элементы не типа GroupingNNA
, а также заставит компилятор использовать GroupingNNA
в качестве типа для g
.
В ответ на комментарий и отредактированный вопрос. Нет, компилятор определенно не будет рад вашей измененной коллекции, но вы можете это исправить:
return new List<Grouping>(filtered.ToArray());
Это зависит от того факта, что массивы в .NET являются ко / противоположными вариантами, что позволяет компилятору обрабатывать GroupingNNA[]
как Grouping[]
для конструктора.
Кроме того, вам не нужна проверка if (filtered != null)
, вы получите коллекцию в filtered
, она может просто не создавать никаких элементов, но filtered
всегда будет не null
.
Это означает, что ваш код может быть записан как:
var filtered = from r in lstGroupings.OfType<GroupingNNA>()
where r.QASensitivity == fSens
select r;
return new List<Grouping>(filtered.ToArray());
или даже просто:
return new List<Grouping>((from r in lstGroupings.OfType<GroupingNNA>()
where r.QASensitivity == fSens
select r).ToArray());
или даже короче, если вы отбросите синтаксис linq:
return new List<Grouping>((lstGroupings.OfType<GroupingNNA>()
.Where(r => r.QASensitivity == fSens).ToArray());
Обратите внимание, что вы, конечно, можете использовать OfType
, чтобы пойти и другим путем:
return filtered.OfType<Grouping>().ToList();
Не должно быть больших различий в производительности между различными способами, если сомневаетесь, измерьте это, но я бы остановился на том, что вам проще всего читать и понимать.