我的实体数据模型中有大约20个不同的报表,它们都有一些公共字段(如start_date和end_date)。当我的报告应用程序为给定报告提取数据时,我要做的第一件事就是过滤当前日期的表格。这意味着我在整个代码(VB)中都有与此类似的代码块:
Dim data =
From r in _context.Rpt1
Where
r.start_date <= Now And
r.end_date >= Now
似乎应该有一种方法将这个逻辑放入一个允许我过滤任何表的函数中,但我无法弄清楚如何构造它。我能做到这一点:
Public Function FilterByDate(data As IEnumerable) As IEnumerable
Return From d In data Where d.start_date <= Now And d.end_date >= Now
End Function
但由于返回值是一个通用的IEnumerable,我失去了特定报告列上早期绑定的所有优点。
有没有办法创建一个通用函数,可以将一些逻辑应用于不同的对象并返回该特定对象而不是通用对象?或者,有没有办法将返回值强制转换回特定的实体对象类型?还有另一种方法来攻击这类问题吗?只是寻找想法或不同的方式来看问题。
答案 0 :(得分:1)
你可以利用生成的实体是部分类这一事实,通过让任何(或者所有,如果它们符合条件)实现一个接口IFoo
来暴露“常见”属性,如{{1} }和start_date
。
然后你可以写一个通用的过滤方法(C#中的代码,对不起):
end_date
由于泛型参数类型约束,这将接受任何有意义的可查询类型,但仍允许返回与传入的完全相同的类型,这要归功于泛型参数类型推导。