设计以对象形式存储查询

时间:2017-04-29 09:16:05

标签: c# sql oop design-patterns

我们正在构建一个应用程序,我们需要以对象形式存储Query,如:

    class Query{
     public Select s{get;set;}
     public From f{get;set;}
    }
    class select {
     public List< Column > columns {get;set;}

    }
    class Column{
     public string ColumnName {get;set;}
     public string AliasName {get;set;}
    }
    class From {
     public Table mainTable{get;set;}
     public List<JoinTable>{get;set;}
    }
    class Table {
     public string tableName{get;set;}
     public string Alias{get;set;}
    }
    class JoinTable:Table{
     public string OnExpression{get;set;}
    }

我们将详细信息存储在这些对象中,以便稍后我们可以使用这些对象为任何数据库创建查询。对于子查询也可能更复杂。如果有更好的设计,请告诉我。

注意:我们正在使用C#开发此应用程序。

1 个答案:

答案 0 :(得分:0)

总有改进的余地,因为“更好”对我们每个人都有不同的含义,我将只关注可证明的改进。由于始终存在改进的空间,因此该列表不是完整的列表,也不是最终列表:

  1. 由于可以使用命名表进行子查询,因此您需要支持此表单的查询:
  2. select c1, c2 from (select c3 as c1, c4 as c2 from yourtable) renamedtable;

    1. 您需要允许排序

    2. 您需要允许分组

    3. 您需要允许分页,即从偏移量开始加载有限数量的记录

    4. 这些只是对您的ORM的评论,但您可能需要重用表达式。您可能希望能够存储这些内容。此外,您可能希望能够为任意数据库中的表生成类。 LINQ是一个必备条件,您可能想要查看其功能并考虑是否需要这些功能,如果需要,那么这些功能将如何适合您的情况。