用于在各种状态/步骤中过滤/计数集合的设计模式
本文关键字:过滤 集合 设计模式 状态 用于 | 更新日期: 2023-09-27 18:27:47
我从一个IEnumerable开始,并希望通过几个包含LINQ to SQL查询的方法运行它,这些查询将过滤结果集。一些方法将对原始结果集进行操作,其他方法将对进一步过滤的结果集进行处理。但是,我想保留提供的IEnumerable a和过滤的IEnumarable B的Excepts(反交叉?)的计数,以便在所有过滤方法结束时可以在电子邮件中发送计数。例如,如果方法A提供了一个60条记录的集合,但经过筛选,结果减少到20条记录,我想把数字40存储在某个地方。
建议采用什么方法来跟踪计数和集合/查询?我曾想过使用IQueryable并在方法中使用out参数执行Count()来跟踪计数,但这似乎很混乱。是否有某种设计模式适合这个过程?
interface IFilter<T>
{
IQueryable<T> Filter(IQueryAble<T> data);
}
interface IResultSet<T>
{
int OrignalCount { get; }
int FilteredCount { get; }
IEnumerable<T> Result { get; }
void AddFilter(IFilter<T> filter);
}
以及IResultSet:的实现
class ResultSet<T> : IResultSet<T>
{
private IQueryable<T> data;
private List<IFilter> filters = new List<IFilter>();
public int OriginalCount {get; private set;}
public int FilteredCount
{
get { return Result.Count(); }
}
public IEnumerable<T> Result
{
get
{
IQueryable data = this.data;
foreach(IFilter filter in filters)
{
data = filter.Filter(data);
}
return data;
}
}
//constructor
public ResultSet<T>(IQueryable<T> data)
{
this.data = data;
this.OriginalCount = data.Count();
}
public void AddFilter(IFilter<T> filter)
{
this.filters.Add(filter);
}
}