DateTime 属性 之一的 C# 扩展列表<T>

C# Extension List<T> for one of DateTime property

我有一个带有过滤器选项的网站,当客户发布请求时,我会检查过滤器 属性 是否有价值,如果有……则执行过滤工作:

public async Task<IActionResult> ContentTable(ContentTableViewModel vm)
{
    vm = vm == null ? new ContentTableViewModel() : vm;
    var qList = _service.Get(); //IQueryable

    if (vm.From.HasValue)
        qList = qList.Where(x => x.Date >= vm.From.Value);
    if(vm.PlanTo.HasValue)
    {
        vm.PlanTo = vm.To.Value.AddDays(1);
        qList = qList.Where(x => x.Date < vm.To.Value);
    }
    vm.List = await qList.ToListAsync();
    return View(vm);
}

我经常使用它,这就是为什么我想使用 "From" 和 "To" 作为方法参数和 return 过滤列表来为列表创建扩展方法。 重要 还告诉扩展方法 属性 将被过滤 - 在这种情况下 Date

public static void WhereBetweenDates<T>(this IList<T> list, DateTime from, DateTime to) 
{
     //? list has no property
}

每个 T 都需要有 BaseClass 吗?告诉方法 "where T: Base" ?

我会像这样传递 T 的 lambda 提取日期:

public static void WhereBetweenDates<T>(this IList<T> list, DateTime from, DateTime to, Func<T, DateTime> extractor) 
{
     foreach (var element in list)
     {
         var elementDt = extractor(element);

         if (elementDt > from && elementDt < to)
         {
             // accept element
         }
     }
}