C# 公共参考数据的查询条件

C# 公共参考数据的查询条件,c#,.net,entity-framework,orm,entity-framework-6,C#,.net,Entity Framework,Orm,Entity Framework 6,对于实体框架,我有一组标准化的查找表。我正试图为这些表集开发一个通用例程,其中EffectiveDate和EndDate介于今天之间。如果有一种常见的方法可以动态设置谓词,那么就不必为每个表设置谓词 每个查找都实现一个接口: public class LookupType : IEffectiveEndDates { public DateTime EffectiveDate { get; set; } public DateTime? EndDate { get;set; }

对于实体框架,我有一组标准化的查找表。我正试图为这些表集开发一个通用例程,其中EffectiveDate和EndDate介于今天之间。如果有一种常见的方法可以动态设置谓词,那么就不必为每个表设置谓词

每个查找都实现一个接口:

public class LookupType : IEffectiveEndDates
{

   public DateTime EffectiveDate { get; set; }

   public DateTime? EndDate { get;set; }

}

我是否可以将此接口与一些东西结合使用来定义通用的query all方法?

您可以在接口之外创建一个谓词,并在LINQ语句中使用它

var date = DateTime.Now;
Expression<Func<IEffectiveEndDates,bool>> pred = 
    x => x.EffectiveDate <= date && x.EndDate >= date;

var lookups = db.ConcreteLookups.Where(pred).ToList();
var date=DateTime.Now;
表达式pred=
x=>x.EffectiveDate=日期;
var lookups=db.ConcreteLookups.Where(pred.ToList();
这是因为-

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

  • 澄清一下:你想获取今天介于生效日期和结束日期之间的所有数据,对吗?是的,所有数据只使用这两个字段。我认为你需要翻转符号。它不应该是
    x.EffectiveDate=date