C# 限制来自存储库的结果

C# 限制来自存储库的结果,c#,nhibernate,repository-pattern,C#,Nhibernate,Repository Pattern,我有一个非常标准的存储库模式,在构建时将存储库注入到我的MVC控制器中。存储库在每个AppDomain中初始化一次,并由其他控制器共享。存储库使用NHibernate ISessions和ICriteria访问数据库,但访问是使用ListXYZ方法公开的,而不是直接接受ICriteria 我现在需要一种简洁的方法来限制在某些情况下返回的结果,例如,其中一种可能是列出给定市场中的所有产品,只有在调用某个操作时才知道 我不想在每次调用ListXYZ方法时都传递这个限制,因为它会导致大量重载方法。理想

我有一个非常标准的存储库模式,在构建时将存储库注入到我的MVC控制器中。存储库在每个AppDomain中初始化一次,并由其他控制器共享。存储库使用NHibernate ISessions和ICriteria访问数据库,但访问是使用ListXYZ方法公开的,而不是直接接受ICriteria

我现在需要一种简洁的方法来限制在某些情况下返回的结果,例如,其中一种可能是列出给定市场中的所有产品,只有在调用某个操作时才知道

我不想在每次调用ListXYZ方法时都传递这个限制,因为它会导致大量重载方法。理想情况下,我希望能够像以前一样访问存储库,但受到限制。比如:

var rep = new ProductRepository().ApplyRestriction(new MarketRestriction("xy"));
var list = rep.ListInCategory("shirts");
有什么建议我应该怎么做吗?还是我把事情弄得太复杂了?

你可以试试这个。以不同的方式使用2个限制(规范)有点奇怪。 我愿意

var rep = new Repository<Product>();
var specification = new MarketSpecification("xy") && new CategorySpecification("shirts");
var list = rep.Find(specification);
var rep=new Repository();
var规范=新市场规范(“xy”)和新类别规范(“衬衫”);
var列表=代表查找(规范);

谢谢,我一直避免这样做,因为我认为这太复杂了,无法实现。但是,一旦我开始着手,它看起来并不太糟糕,而且运行得很好。