gpt4 book ai didi

c# - 将用户生成的查询向下传递到 n 层应用程序

转载 作者:太空宇宙 更新时间:2023-11-03 14:34:39 24 4
gpt4 key购买 nike

在我的应用程序中,我使用我的数据访问层 (DAL) 生成计划旧 CLR 对象 (POCO),这些对象将发送到我的业务层 (BL)。 BL 然后使用模型 View View 模型 (MVVM) 模式创建对象以绑定(bind)到我的表示层 (PL)。

我想让我的用户能够在列级别过滤数据。例如 http://demos.telerik.com/aspnet-ajax/grid/examples/generalfeatures/filtering/defaultcs.aspx

还有其他执行类似功能的网格控件,但总的来说,这就是我想要提供的用户体验。

我有一个大数据集,所以我想在服务器端进行所有分页/排序/过滤。

将分页/排序数据沿着 n 层架构发送到我的 DAL 是微不足道的,所以我只会提取我感兴趣的记录。

但是我不确定如何将过滤器数据发送到我的 DAL,因为用户可以生成任意长的过滤器表达式。

我的问题是:我有哪些选项可以通过我的 n-tired 应用程序发送用户生成的过滤器表达式。

我的想法:

  • 如果我的数据,我的生活会更轻松结构与我的对象相同结构也是一样的我向用户展示的 View 。但是我的数据结构不能轻松映射到用户 View ,例如许多控件提供者喜欢在他们的例子中展示。
  • 许多网格控件提供商提供服务器端功能,但他们需要一个人来使用他们的 Linq供应商。这会打破许多我的建筑元素。
  • Grid 控件确实生成了一个表达式“string”,我可以传递给我的 DAL 并让它解释它。然而,这会耦合我的 DAL到这个特定的控制表达式字符串格式。
  • 我可以创建一个“表达式树”将它作为参数传递给我的 DAL。我因此只需要写一个表达式的 DAL 解释器树一次。然后对于任何网格控件我将不得不生成要传递的适当表达式树它下来。

最佳答案

只是一个意见,但我会不惜一切代价避免解析。我也鼓励尽可能使用强类型数据。

我自己会采用“表达式树”的想法。我在大型应用程序中使用它没有太多问题。我们构建了自己的实现来表示表达式,因为我们使用的是 .Net 2.0 并且不需要很多支持(仅相等)。我无法从您的帖子中判断您是否考虑构建自己的,但我们提出了类似以下的内容:

class ValueTriple { 
System.Type FieldType;
string Field;
object Value;
}

class AndCritieria {
ValueTriple[] Criteria;
}

class OrCriteria {
AndCriteria[] Criteria;
}

我们用特定于实体的丰富类型“查询”类包装了这些类,并最终用排序/分页信息扩展了 OrCriteria。上面的查询结构使我们能够通过本质上标准化输入查询结构来表达任何基于相等性的条件,而不管复杂性如何。例如:

WHERE x = '1' AND (y = '2' OR z = '3')

也可以表示为:

WHERE (x = '1' AND y = '2') OR (x = '1' AND z = '3')

关于c# - 将用户生成的查询向下传递到 n 层应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1555607/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com