我尝试允许最终用户过滤其数据,然后根据所选的报告实例和日期范围提供输出。我的报告层次结构是使用实体框架(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; }
}