none
如何构建基于命令的查询数据集合的系统?使用户输入条件查询代码,后台通过这个条件查询代码查找出数据集合对应的部分,这个功能的实现需要哪些算法知识和工具? RRS feed

  • 问题

  • 一个实体,一个关于这个实体的数据集合,假设该泛型数据集合的实体分别有三个属性,name,id,CreateDate 。而用户输入的条件查询代码中的"姓名"映射name这个属性,"录入日期"映射CreateDate这个属性。接受用户输入在TextBox控件的条件查询代码。

    例如用户输入"[姓名]=张三 && [录入日期]>2015/10/12",点击按钮,后台接受这个字符串,并解析字符串中的条件成分有几个,根据解析出的条件,筛选数据集合中的数据。筛选数据集合中name==张三且录入日期大于2015/10/12的数据

    我以前的查找数据方式,通过combobox控件限定查找的属性,但这种方式,比较单一,如果要查多个属性弄出很多combobox控件又很麻烦,于是我想构建类似sql的查询方式,根据"查询代码"字符串来查询数据集合内的数据。当然能被查询的实体属性都是指定的。不能直接让实体属性名暴露给用户,给属性预设别名让用户输入。

    不过我在这方面可是一片空白,不知道先往哪个部分走,也不知道通过哪个关键字在互联网搜索这方面的相关内容,索性来这里问一下,构建一个基于命令的查询系统,该功能的实现需要哪些算法知识和工具?。

    2017年5月5日 5:30

答案

  • 考虑用command模式实现,每一种命令(字符串)经过解析后,转化为一个command类,我认为分为以下三个部分

    1  字符串解析,分解命令

    2  命令处理系统 command(query command查询命令,execute comand更新命令)等

    3  参数过滤,可以解析各种参数的组合,比如 name='MSDN' and age=32,日期>= '2017/5/1' and 日期<='2017/5/31'

        这需要用一套对象对象体系来完成,可参考ORM中的查询条件部分。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2017年5月5日 9:58

全部回复

  • Hi 便携式家园,

    感谢你在MSDN论坛发帖。 

    你有考虑使用C#的replace方式来替换你输入的"[姓名]=张三 && [录入日期]>2015/10/12"。然后进行数据库的匹配。

    这是我想到的方法。 

    在ASP.NET MVC中有个display 的属性,在view视图显示之前,通过display 就可以知道 名字(Name)的属性。例如下面:

    public class BaseViewModel
    {
     [Display(Name = "Basic Name")]
     public virtual string Name { get; set; }
    }
    
    public class OtherViewModel : BaseViewModel
    {
     [Display(Name = "Customized Inherited Name")]
     public override string Name { get; set; }
    }

    不知道这种情况(反射),是不是你想要的。

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年5月5日 8:12
    版主
  • 考虑用command模式实现,每一种命令(字符串)经过解析后,转化为一个command类,我认为分为以下三个部分

    1  字符串解析,分解命令

    2  命令处理系统 command(query command查询命令,execute comand更新命令)等

    3  参数过滤,可以解析各种参数的组合,比如 name='MSDN' and age=32,日期>= '2017/5/1' and 日期<='2017/5/31'

        这需要用一套对象对象体系来完成,可参考ORM中的查询条件部分。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2017年5月5日 9:58
  • Hi 便携式家园,

    感谢你在MSDN论坛发帖。 

    你有考虑使用C#的replace方式来替换你输入的"[姓名]=张三 && [录入日期]>2015/10/12"。然后进行数据库的匹配。

    这是我想到的方法。 

    在ASP.NET MVC中有个display 的属性,在view视图显示之前,通过display 就可以知道 名字(Name)的属性。例如下面:

    public class BaseViewModel
    {
     [Display(Name = "Basic Name")]
     public virtual string Name { get; set; }
    }
    
    public class OtherViewModel : BaseViewModel
    {
     [Display(Name = "Customized Inherited Name")]
     public override string Name { get; set; }
    }

    不知道这种情况(反射),是不是你想要的。

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    不仅仅是名字替换啊,最难的地方是如何自己定义查询运算符,以及规定什么样的字符串算合法的查询表达式,以及解析多个查询表达式,名字替换的难度是最小的。


    2017年5月6日 1:11
  • 例如用户输入"[姓名]=张三 && [录入日期]>2015/10/12",点击按钮,后台接受这个字符串,并解析字符串中的条件成分有几个,根据解析出的条件,筛选数据集合中的数据。筛选数据集合中name==张三且录入日期大于2015/10/12的数据

    创建一个集合,存取姓名对应的英文,然后按照&&分隔条件,

    然后拼接条件


    please verify my account

    • 已建议为答案 lctk 2017年5月6日 3:03
    2017年5月6日 3:03