子类方法返回类型

时间:2016-12-07 16:42:58

标签: c# entity-framework oop

我尝试允许最终用户过滤其数据,然后根据所选的报告实例和日期范围提供输出。我的报告层次结构是使用实体框架(TPH)设置的。目前,我在基类上设置了一个抽象方法,它将返回类型 ReportResult

 public abstract ReportResult GetContent(IQueryable<Employee> employees, DateTime startDate, DateTime endDate);

由于每个报告 ReportResult 与另一个完全不同,我创建了一个空的 ReportResult 类(摘要) )并且每个报表实例都将返回自己的 ReportResult 。这并不像是这样做的正确方法,但由于我不能在实体框架中使用泛型,我不太清楚该怎么做。使用 ReportResult 的空抽象基类可以获得GetContent的返回值,还是有更好的方法可以做到这一点?

示例

public abstract class Base
{
    public int Id { get; set; } 
    public string Name { get; set; }

    public abstract ReportResult GetContent(IQueryable<Employee> employee, DateTime startDate, DateTime endDate);
}

public class Foo : Base
{
    public override ReportResult GetContent(IQueryable<Employee> employees, DateTime startDate, DateTime endDate)
    {
        FooResult fooResult;
        // Transform/Filter the employee IQueryable
        return fooResult;
    }
}

public class Bar : Base
{
    public override ReportResult GetContent(IQueryable<Employee> employees, DateTime startDate, DateTime endDate)
    {
        BarResult barResult;
        // Transform/Filter the employee IQueryable
        return barResult;
    }
}

public abstract class ReportResult
{   
    // Hierarchy will hold transformations on the employee IQueryable.  This
    // could be a filtered subset of employees and/or aggregates performed to
    // obtain an overview.
}

public class FooResult : ReportResult
{
    public string FooSpecificProperty1 { get; set; }
    public string FooSpecificProperty2 { get; set; }
}

public class BarResult : ReportResult
{
    public int BarProperty1 { get; set; }
    public DateTime BarProperty2 { get; set; }
}

0 个答案:

没有答案