C#扩展列表<;T>;对于DateTime属性之一

C#扩展列表<;T>;对于DateTime属性之一,c#,list,extension-methods,C#,List,Extension Methods,我有一个带有筛选选项的网站,当客户发布请求时,我会检查filter属性是否有值,如果有。。执行筛选作业: public async Task<IActionResult> ContentTable(ContentTableViewModel vm) { vm = vm == null ? new ContentTableViewModel() : vm; var qList = _service.Get(); //IQueryable if (vm.From

我有一个带有筛选选项的网站,当客户发布请求时,我会检查filter属性是否有值,如果有。。执行筛选作业:

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);
}
公共异步任务ContentTable(ContentTableViewModel vm)
{
vm=vm==null?新建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
我经常使用这个方法,这就是为什么我想用“From”和“to”作为方法参数为List创建扩展方法,并返回过滤后的List重要的是告诉扩展方法将过滤哪个属性-在本例中是日期

public static void WhereBetweenDates<T>(this IList<T> list, DateTime from, DateTime to) 
{
     //? list has no property
}
public static void wherebetween数据(此IList列表,日期时间从,日期时间到)
{
//?列表没有属性
}

我需要为每个T设置基类吗?要告诉方法“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 static void wherebetween数据(此IList列表、日期时间从、日期时间到、Func提取器)
{
foreach(列表中的var元素)
{
var elementDt=提取器(元件);
if(elementDt>from&&elementDt
我会像这样传递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 static void wherebetween数据(此IList列表、日期时间从、日期时间到、Func提取器)
{
foreach(列表中的var元素)
{
var elementDt=提取器(元件);
if(elementDt>from&&elementDt
列表有什么问题。其中(x=>x.DateTimeProp>=from&&x.DateTimeProp
?为什么需要扩展方法?通常,如果用户选择从:01.01.2020到:02.01.2020的日期,他希望看到两天的结果。。。1月1日和2日。。。不仅仅是01。。DateTime也可以为空DateTime?-如果From为01.01.2020且to为空,则用于显示结果。。。列表将包含年初的匹配项我的观点是,您不需要在
list
上使用其他扩展方法,因为
Where
已经提供了您想要的功能。如果需要,可以创建一个扩展方法,该方法采用您自己的类型(或接口),该类型(或接口)具有
DateTime
属性,如果该属性的值在
from
to
范围内,则可以搜索并返回
bool
,然后在列表的
Where
扩展方法中使用此方法,或者,如果您想要返回列表,您可以在列表的
FindAll
方法中使用该方法,但无论如何,这不应该(实际上也不能)是列表本身的扩展方法。
list有什么问题。其中(x=>x.DateTimeProp>=from&&x.DateTimeProp
?为什么需要扩展方法?通常,如果用户选择从:01.01.2020到:02.01.2020的日期,他希望看到两天的结果。。。1月1日和2日。。。不仅仅是01。。DateTime也可以为空DateTime?-如果From为01.01.2020且to为空,则用于显示结果。。。列表将包含年初的匹配项我的观点是,您不需要在
list
上使用其他扩展方法,因为
Where
已经提供了您想要的功能。如果需要,可以创建一个扩展方法,该方法采用您自己的类型(或接口),该类型(或接口)具有
DateTime
属性,如果该属性的值在
from
to
范围内,则可以搜索并返回
bool
,然后在列表的
Where
扩展方法中使用此方法,或者,如果您想要返回一个列表,您可以在list的
FindAll
方法中使用它——但无论如何,这不应该(实际上也不可能)列表本身的一个扩展方法。这里如何使用
to
from
参数?如果这能起作用那就太好了:
公共静态IQueryable wherebeween数据(这个IQueryable列表,Func提取器,DateTime?from,DateTime?to){if(from.HasValue)list=list.Where(x=>extractor(x)>=from.Value);if(to.HasValue){to=to.Value.AddDays(1);list=list.Where(x=>extractor(x)
这里如何使用
to
from
参数?如果这能起作用那就太好了:
public static IQueryable wherebeweentates(这个IQueryable列表,Func提取器,DateTime?from,DateTime?to){if(from.HasValue)list=list.Where(x=>extractor(x)>=from.Value);if(to.HasValue){to=to.Value.AddDays(1);list=list.Where(x=>extractor(x)