Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 设计库生成动态MDX查询_C# 4.0_Design Patterns_Mdx - Fatal编程技术网

C# 4.0 设计库生成动态MDX查询

C# 4.0 设计库生成动态MDX查询,c#-4.0,design-patterns,mdx,C# 4.0,Design Patterns,Mdx,我们正在动态生成MDX查询。我们传递列([DimesnionName].[Attribute.Name]格式)、行([DimesnionName].[Attribute.Name]格式)和过滤器([DimesnionName].[Attribute.Name].[Member Name]格式)的列表,以及其他输入,如多维数据集名称、页码、度量值等 这些信息被传递到一个C#库,然后我们使用大量的“If”和“Else”条件来处理这些输入,并以字符串形式生成MDX查询。它需要大量的字符串操作 你可以说

我们正在动态生成MDX查询。我们传递列([DimesnionName].[Attribute.Name]格式)、行([DimesnionName].[Attribute.Name]格式)和过滤器([DimesnionName].[Attribute.Name].[Member Name]格式)的列表,以及其他输入,如多维数据集名称、页码、度量值等

这些信息被传递到一个C#库,然后我们使用大量的“If”和“Else”条件来处理这些输入,并以字符串形式生成MDX查询。它需要大量的字符串操作

你可以说它有一个工作流程。经过每个条件后,系统生成一些输出。我想知道是否有更聪明的方法来设计这个库

  • 我想删除if-else条件
  • 我想让它更具可读性
  • 我想让它更容易管理

  • 我的问题是:有什么设计原则可以使用吗?我可以考虑使用Windows工作流。请提供您的建议

    我来这里是想看看是否有人这样做了,这样我就不必这么做了。到目前为止运气不好。但在我的脑海中,您可能想要看到的是某种形式的规则引擎,它将评估目标字符串的状态并添加各种条件

    现在我甚至还没有开始研究MDX的语法。我并没有走得太远,但如果我想创建一个引擎来创建sql查询,我会先看看部分(最简单的情况是),您需要列列表、表和where子句列表。因此,您可以有三个或可能只有两个基本引擎类—一个接受字符串列表和(或者更好的是表达式列表)并连接它们(或者求值,然后连接它们)。如果目标字符串为空,则targetString=“选择”+x否则targetString=“,”+x。然后对where表达式执行类似的操作。对于构建实现不同形式的where表达式等的类,您可能会有更大的兴趣。最终你会通过你的引擎,比如

    MySqlEngine(new[] {"FirstName", "LastName", "GirlFriendsAddress"},
               new []{EqualsExpression("FirstName","Brown"), EqualsExpression("LastName",Dynamite")},
               "People");
    
    它会回来的

    "SELECT FirstName, LastName, GirlFriendsAddress From People Where FirstName = \"Brown\" AND LastName = \"Dynamite\""
    
    我强烈建议使用表达式来计算与表匹配的目标模型上的属性。然后您可以使MySqlEnigine(…)不必提供给表名,因为您的模型可以被命名为相同的,并且除了where子句的目标值之外,您不会使用任何字符串

    我知道这不是你想要的引擎,但我还不知道MDX,所以你必须用它作为类比

    最后的想法不使用窗口工作流。你会想半途而废,如果你成功了,那么在未来的许多年里,会有开发者诅咒你的名字

    祝你好运

    哦,如果你建立了,请开源,告诉我,这样我就不用做了