对于Entity Framework,我有一组标准化的查找表。我正在尝试为这些表集开发一个通用例程,其中EffectiveDate和EndDate介于今天之间。如果有一种常见的方式我可以动态设置谓词,我不必为每个表设置它。
每个查找实现一个接口:
public class LookupType : IEffectiveEndDates
{
public DateTime EffectiveDate { get; set; }
public DateTime? EndDate { get;set; }
}
我可以结合使用此接口来定义所有方法的通用查询吗?
答案 0 :(得分:1)
您可以在接口上创建谓词并在LINQ语句中使用它。
var date = DateTime.Now;
Expression<Func<IEffectiveEndDates,bool>> pred =
x => x.EffectiveDate <= date && x.EndDate >= date;
var lookups = db.ConcreteLookups.Where(pred).ToList();
这是因为 -
Func
定义为Func<in T, out TResult>
,这意味着实体(T
)的类型参数是逆变的,因此Func<IEffectiveEndDates,bool>
也可以传递给Func<ConcreteLookup,bool>
。