Нет. A B не гарантируется как C, поэтому вы не можете хранить B в переменной, которая может содержать только C. (Животное не обязательно является ламой, поэтому вы не можете создать универсальное животное и сохранить его в переменной ламы.)
Однако вы могли бы предоставить способ построения экземпляра C из B - либо с помощью C скопировать свойства из B, либо с помощью C, сохраняющего B как частный член, и делегирующего свойства get и устанавливает сеттер на B. Тогда ваш код будет выглядеть так:
B b = brepo.GetBById(id);
C c = new C(b);
c.extraProperty = brepo.GetCountByBId(b.Id);
Та же проблема относится к IQueryable из Bs. Если они на самом деле не C, вы не можете притворяться, что они есть, и не устанавливать для них extraProperty. Что вы можете сделать, это выбрать те, которые являются C, с помощью оператора OfType, попытаться привести их к C, используя оператор Cast, или создать новые C из запрашиваемых B, используя оператор Select и один из методов, упомянутых выше, например, bs.Select(b => new C(b))
.