У вас проблема здесь, потому что вы на самом деле не создаете экземпляры производного класса. Вам нужно создать экземпляры CarFuelType
, а не BaseTable
. Как только вы это сделаете, вам не понадобится кастинг. Вы можете сделать это следующим образом - по крайней мере для LINQ to Objects:
private IList<T> GetAllActiveData<T>(int filter) where T : BaseTable, new()
{
var result = from c in _lookUpTableValuesRepository
.GetAllRowsWhere(l => l.ParentID == filter
&& l.IsActive==true)
select new T() { ID = c.ID,
Description = c.Description,
ParentID = c.ParentID };
return result.ToList();
}
Я сомневаюсь, что это будет работать для LINQ to SQL или Entity Framework, хотя ... вам, вероятно, придется создать экземпляры BaseTable в запросе LINQ to SQL, а затем преобразовать их в памяти, например,
var baseQuery = from c in _lookUpTableValuesRepository
.GetAllRowsWhere(l => l.ParentID == filter
&& l.IsActive==true)
select new BaseTable { ID = c.ID,
Description = c.Description,
ParentID = c.ParentID };
var converted = baseQuery.AsEnumerable()
.Select(b => new T() { ID = b.ID,
Description = b.Description,
ParentID = b.ParentID };
Однако это может утратить "сущность" - у вас могут быть проблемы с использованием этих объектов для обновлений и т. Д.