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