查询公共参考数据的条件

时间:2014-12-23 17:13:14

标签: c# .net entity-framework orm entity-framework-6

对于Entity Framework,我有一组标准化的查找表。我正在尝试为这些表集开发一个通用例程,其中EffectiveDate和EndDate介于今天之间。如果有一种常见的方式我可以动态设置谓词,我不必为每个表设置它。

每个查找实现一个接口:

public class LookupType : IEffectiveEndDates
{

   public DateTime EffectiveDate { get; set; }

   public DateTime? EndDate { get;set; }

}

我可以结合使用此接口来定义所有方法的通用查询吗?

1 个答案:

答案 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();

这是因为 -

  1. 编译器接受它:Func定义为Func<in T, out TResult>,这意味着实体(T)的类型参数是逆变的,因此Func<IEffectiveEndDates,bool>也可以传递给Func<ConcreteLookup,bool>
  2. 查询提供程序成功将表达式转换为SQL,因为所有属性表达式都具有正确的名称。