あなたの問題は、メソッドがジェネリックではなく、クラスがジェネリックであることです。メソッド名の後にはないことに注意<T>
してください。これは、クラスの型引数に使用されたものの IQueryable を渡す必要があることを意味します。
たとえば、オブジェクトが次のようにインスタンス化された場合:
new BaseController<BaseObject>(..) //ignoring that BaseController is abstract
派生する必要があるコントローラーのタイプIQueryable<BaseObject>
を渡したい場合は、 so を渡す必要がありますIQueryable<Car>
BaseController<Car>
一方、メソッドをジェネリックにしたい場合は、メソッドのシグネチャを次のように変更します。
public IQueryable<TElement> FilterEntities<TElement>
(IQueryable<TElement> entities)
クラスの型パラメーターにある T の型制約は含まれません。これをジェネリック メソッドに適用する必要がある場合、署名は次のようにする必要があります。
public IQueryable<TElement> FilterEntities<TElement>(IQueryable<TElement> entities)
where TElement : BaseObj, new()
編集
T を型引数として単に使用する「デフォルト」メソッドが必要な場合は、コードにあるのと同じように非ジェネリック メソッドとして実装する必要があるため、クラスは次のようになります。
public abstract class BaseController<T> : ControllerBase
where T : BaseObj, new()
{
public IQueryable<T> FilterEntities(IQueryable<T> entities)
{
return FilterEntities<T>(entities);
}
public IQueryable<TElement> FilterEntities<TElement>(IQueryable<TElement> entities)
where TElement : BaseObj, new()
}