作成しようとしているジェネリック メソッドのシグネチャに問題があります。
クラスは次のとおりです。
public class MarketDataRepository : IRepository
{
MarketWatchEntities _dbContext = new MarketWatchEntities();
public MarketDataRepository(){}
public MarketDataRepository(MarketWatchEntities dbContext)
{
_dbContext = dbContext;
}
public IEnumerable<T> GetMarketData<T>(DateTime startDateTime, DateTime endDateTime ) where T : MarketDataPoint
{
return _dbContext.MarketDataPoints.Where(x => x.ReferenceDateTime >= startDateTime && x.ReferenceDateTime <= endDateTime).ToList();
}
}
public interface IRepository
{
IEnumerable<T> GetMarketData<T>(DateTime startDateTime, DateTime endDateTime) where T : MarketDataPoint;
}
追加情報:
MarketWatchEntities
extends DbContext
(Entity Framework によって生成されます)。
このコンパイル時の例外が発生します。
Cannot implicitly convert type 'System.Collections.Generic.List<MarketWatcher.Domain.MarketDataPoint>' to 'System.Collections.Generic.IEnumerable<T>'. An explicit conversion exists (are you missing a cast?)
T
から継承するように制約していることに基づいて、これは問題ないと思っていましたMarketDataPoint
。IEnumerable
だから、私はofを返すことができると思いましたMarketDataPoint
。
上記の何が問題なのか、代わりに何をすべきかについての指針をいただければ幸いです。
解決策(みんなありがとう):
public class MarketDataMarketDataRepository : IMarketDataRepository
{
MarketWatchEntities _dbContext = new MarketWatchEntities();
public MarketDataMarketDataRepository(){}
public MarketDataMarketDataRepository(MarketWatchEntities dbContext)
{
_dbContext = dbContext;
}
public IQueryable<T> GetMarketData<T>(DateTime startDateTime, DateTime endDateTime ) where T : MarketDataPoint
{
return _dbContext.MarketDataPoints.Where(x => x.ReferenceDateTime >= startDateTime && x.ReferenceDateTime <= endDateTime).OfType<T>();
}
}