none
如果所有的查询条件都通过Dictionary<string,string>进行传递,会怎样? RRS feed

  • 问题

  • 最近做一个系统,因为涉及到组合查询,于是想到使用Dictionary<string,string>的方式,存放查询条件,然后再在数据访问层通过一定的方法从这个dic中取出查询条件。

    开始的时候只是想对查询使用dic,最后发现其他的带条件的数据库操作也可以通过使用dic的方式,写一个通用的处理方法。
    比 如:更新数据库。使用ExcuteSqlUpdate(string strSql,Dictionary<string,string> dicWhere,Dictionary<string,string> dicEditField)的方式,就可以灵活的使用不同的条件更新不同的字段的内容了。dicWhere:表示条件,dicEditField表示要更 新的字段。

    使用dic可以很好的写一些通用的处理方法,但是由于系统需要一定的性能,所以担心大量使用dic会导致性能开销。

    哪位了解Dictionary<T,V>使用的可以给个意见。谢谢。
    .net
    2011年3月22日 8:56

答案

  • 所说的组合查询  ,数据列的宽度仅仅影响网络流量 对性能影响可忽略  您要用dactionary 进行列限制的话就得不偿失了。

    另外 如果您仅仅是需要罗列条件后foreach  而不需要按照key进行查找的话   创建dictionary是较为浪费的

    这时候不如用 List<KeyValuePare<T,V>>  来得快


    入了ipad,最近用ipad上论坛
    • 已标记为答案 ISKLL 2011年3月28日 3:06
    2011年3月25日 1:45

全部回复

  • 您好,这可能需要看性能指标。

    可以用vs自带的性能测试工具进行测试,采集数据来分析。

    就我个人观点而言,感觉应该没问题,毕竟Dictionary比处理数据库的操作要快。

    2011年3月24日 13:50
    版主
  • 我在项目中都将多个查询条件放到一个类中,这样可以方便地增加条件。

    用Dictionary<T,V>的话,由于key值是个字符串,不容易维护,如果字符串的命名变了,你要改多个地方,容易出错;用类的话,如果命名有变,编译就不通过了,杜绝了一些隐患

    2011年3月25日 1:15
  • 性能没什么大问题  hashtable 而已。 但是其中字段的类型信息是缺失的  不如用datarow更好吧。


    入了ipad,最近用ipad上论坛
    2011年3月25日 1:41
  • 所说的组合查询  ,数据列的宽度仅仅影响网络流量 对性能影响可忽略  您要用dactionary 进行列限制的话就得不偿失了。

    另外 如果您仅仅是需要罗列条件后foreach  而不需要按照key进行查找的话   创建dictionary是较为浪费的

    这时候不如用 List<KeyValuePare<T,V>>  来得快


    入了ipad,最近用ipad上论坛
    • 已标记为答案 ISKLL 2011年3月28日 3:06
    2011年3月25日 1:45