C# 用于在各种状态/步骤中过滤/计数集合的设计模式
我从一个IEnumerable开始,希望通过几个包含LINQ到SQL查询的方法来运行它,这些查询将过滤结果集。一些方法将对原始结果集进行操作,其他方法将对进一步过滤的结果集进行操作。但是,我希望保留所提供的IEnumerable a和已过滤的IEnumerable B的例外(反交叉?)计数,以便可以在所有过滤方法结束时在电子邮件中发送计数。例如,如果方法A提供了一个包含60条记录的集合,但经过筛选后,结果减少到20条记录,那么我想将数字40存储在某个地方 跟踪计数和收集/查询的推荐方法是什么?我曾考虑在带有out参数的方法中使用IQueryable和do Count()来跟踪计数,但这看起来很混乱。是否有某种设计模式适合此流程?C# 用于在各种状态/步骤中过滤/计数集合的设计模式,c#,linq,design-patterns,linq-to-sql,C#,Linq,Design Patterns,Linq To Sql,我从一个IEnumerable开始,希望通过几个包含LINQ到SQL查询的方法来运行它,这些查询将过滤结果集。一些方法将对原始结果集进行操作,其他方法将对进一步过滤的结果集进行操作。但是,我希望保留所提供的IEnumerable a和已过滤的IEnumerable B的例外(反交叉?)计数,以便可以在所有过滤方法结束时在电子邮件中发送计数。例如,如果方法A提供了一个包含60条记录的集合,但经过筛选后,结果减少到20条记录,那么我想将数字40存储在某个地方 跟踪计数和收集/查询的推荐方法是什么?我
接口IFilter
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);
}
{
IQueryable过滤器(IQueryable数据);
}
接口结果集
{
int OrignalCount{get;}
int FilteredCount{get;}
IEnumerable结果{get;}
空隙过滤器(IFilter过滤器);
}
以及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);
}
}
类结果集:IResultSet
{
私有可查询数据;
私有列表筛选器=新列表();
public int OriginalCount{get;private set;}
公共int FilteredCount
{
获取{return Result.Count();}
}
公共可数结果
{
得到
{
IQueryable数据=this.data;
foreach(过滤器中的IFilter过滤器)
{
数据=过滤器。过滤器(数据);
}
返回数据;
}
}
//建造师
公共结果集(IQueryable数据)
{
这个数据=数据;
this.OriginalCount=data.Count();
}
公共无效添加筛选器(IFilter筛选器)
{
this.filters.Add(filter);
}
}
我对你的问题有点困惑。你能不能先减去60和20,然后得到40?