常见参考资料的查询条件

本文关键字:条件 查询 参考资料 常见 | 更新日期: 2023-09-27 18:35:18

对于实体框架,我有一组标准化的查找表。 我正在尝试仅为这些表集开发一个通用例程,其中生效日期和结束日期介于今天之间。 如果有一种通用方法可以以动态方式设置谓词,则不必为每个表设置谓词。

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

public class LookupType : IEffectiveEndDates
{
   public DateTime EffectiveDate { get; set; }
   public DateTime? EndDate { get;set; }
}

我可以将此接口与某些东西结合使用来定义泛型查询 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();

这是有效的,因为 -

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