C# 用于在各种状态/步骤中过滤/计数集合的设计模式

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存储在某个地方 跟踪计数和收集/查询的推荐方法是什么?我

我从一个IEnumerable开始,希望通过几个包含LINQ到SQL查询的方法来运行它,这些查询将过滤结果集。一些方法将对原始结果集进行操作,其他方法将对进一步过滤的结果集进行操作。但是,我希望保留所提供的IEnumerable a和已过滤的IEnumerable B的例外(反交叉?)计数,以便可以在所有过滤方法结束时在电子邮件中发送计数。例如,如果方法A提供了一个包含60条记录的集合,但经过筛选后,结果减少到20条记录,那么我想将数字40存储在某个地方

跟踪计数和收集/查询的推荐方法是什么?我曾考虑在带有out参数的方法中使用IQueryable和do Count()来跟踪计数,但这看起来很混乱。是否有某种设计模式适合此流程?

接口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?