【发布时间】:2021-11-05 01:40:27
【问题描述】:
我有一个奇怪的问题,通过提升一个非常旧的系统并将 10 年前的 nHibernate 替换为 EF。我在为搜索页面制定一些 linq 扩展时遇到了麻烦。 我要重构的是这个(这个代码行被多次使用或与其他类型的变体一起使用):
if (searchCriteria.PlannedEndDateFrom.HasValue && searchCriteria.PlannedEndDateTo.HasValue)
{
efquerable= efquerable.Where(d => searchCriteria.PlannedEndDateFrom < d.PlannedEndDate && d.PlannedEndDate > searchCriteria.PlannedEndDateTo);
}
else if (searchCriteria.PlannedEndDateFrom.HasValue)
{
efquerable= efquerable.Where(d => d.PlannedEndDate > searchCriteria.PlannedEndDateFrom);
}
else if (searchCriteria.PlannedEndDateTo.HasValue)
{
efquerable= efquerable.Where(d => d.PlannedEndDate < searchCriteria.PlannedEndDateTo);
}
这应该能够转移到我做这种检查的扩展......
private static IQueryable<T> FilterOnCorrectSearchDateTime<T>(this IQueryable<T> efquerable, Expression<Func<T, DateTime>> datePropertyName, DateTime? dateFrom, DateTime? dateTo)
{
//Missing code
}
然后被称为像
EFquerable = EFquerable.FilterOnCorrectSearchDateTime<EntityObjectWithDatetimeproperty>(s=>s.PlannedEndDate ,searchCriteria.PlannedEndDateFrom,searchCriteria.PlannedEndDateTo);
对于如何解决这个问题有什么建议吗?
我坚持的是处理对发送到函数的属性的检查。如何将 Expression
【问题讨论】:
标签: entity-framework c#-4.0 linq-to-entities linq-expressions linq-extensions