0

我有以下情况:

用户登录,打开所有产品的概览,只能看到添加了条件的产品列表,这个条件是可变的。例子:WHERE category in ('catA', 'CatB')

管理员登录,打开所有产品的概览,他可以看到所有未应用过滤器的产品。

我需要尽可能动态地进行此操作。我的数据访问类大部分时间都在使用泛型。

我见过过滤器 ,但我的条件非常多变,所以我认为这不够可扩展。

4

2 回答 2

2

我们使用 NH 过滤器来做类似的事情,而且效果很好。如果不需要应用过滤器,您可以省略为过滤器设置任何值。我们将这些过滤器用于更基本的内容、几乎 100% 应用的过滤器、fx 已删除对象过滤器、客户端数据隔离等。不确定您在寻找什么可扩展性方面?

对于更高级和更复杂的过滤,我们使用一个操作存储库根的自定义类。类似于以下内容:

 public IQueryOver<TIn, TOut> Apply(IQueryOver<TIn, TOut> query)
 {
      return query.Where(x => ... );
 }

如果您有一个与您的 NH 使用集成的 IoC 容器,则可以轻松推广此类内容并将其插入您的堆栈中。我们有这些存储库操纵器,它们执行简单的 where 子句,以及其他生成复杂的 where 子句(引用域逻辑)和其他连接第二个表并在其上过滤的存储库操纵器。

于 2013-02-20T10:18:34.827 回答
0

您可以将所有类别保存在类别列表中并将此列表传递给查询。如果列表不为 null 并且包含元素,则可以使用以下内容:

List<string> allowedCategoriesList = new List<string>();
allowedCategoriesList.Add(...);
...
.WhereRestrictionOn(x => x.category).IsIn(allowedCategoriesList)

如果您没有任何过滤器,则跳过此条目很重要(因此,您希望查看所有条目而不过滤),否则您将看不到一个结果。

于 2013-02-20T11:01:51.347 回答