C#扩展列表<;T>;对于DateTime属性之一
我有一个带有筛选选项的网站,当客户发布请求时,我会检查filter属性是否有值,如果有。。执行筛选作业: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
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)