[英]Using Where( Expression<Func<T, bool>> ) in IGrouping
[英]Using a single Func<T,bool> with Where() and inheritance
我正在尝试使用单个Func<T,bool>
定义来处理类及其继承者。 这就是我所拥有的:
Func<Job, bool> ValidJob =
j => !j.Deleted && !j.OnHold && j.PostDate <= DateTime.Now && j.ExpireDate > DateTime.Now;
public class JobExtended : Job { }
因此,鉴于此,以下工作:
IQueryable<Job> jobs = ...
jobs.Where(ValidJob);
但是,以下内容不是:
IQueryable<JobExtended> jobs = ...
jobs.Where(ValidJob);
我想知道在这种情况下是否有可能只有一个Func<T,bool>
,如果是的话,怎么样? 我已经尝试按照建议指定类型参数,但我没有运气。
这将在C#4中起作用,其中代表具有通用的协方差和逆变,但在此之前不会。 但是,您可以从C#2开始轻松使用现有委托:
jobs.Where(new Func<JobExtended, bool>(ValidJob));
以下是解决方案的变体:在命名函数中使用泛型类型:
public static bool ValidJob<T>(T j) where T : Job
{
return
!j.Deleted &&
!j.OnHold &&
j.PostDate <= DateTime.Now &&
j.ExpireDate > DateTime.Now;
}
然后这些工作:
IQueryable<Job> jobs = ...
jobs.Where(ValidJob);
IQueryable<JobExtended> jobs = ...
jobs.Where(ValidJob);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.