none
在的高手给我解决个泛型的问题 RRS feed

  • 问题

  • List<string> topicIds = new List<string>();

    topicIds 有数据: 1015, 1016,  1020 ,1021, 1022 

    while(dr.Read())
    {
    //根据dr[0].ToString()查到了ds,ds包含 topicId,其余字段省略

    //在这判断
    }

    //while循环结果后 topicIds里的数据 肯定全部包含在 N次循环的ds的所有topicId中,也就是说所有的ds的Count 肯定比topicIds 的Count 多或相同

    怎么用最简单的办法找出topicIds 中没有的 而在ds中存在的 topicId?
    在while中判断

    两重循环外的办法有的话请详细的说谢谢

    2010年5月1日 15:48

答案

  • 你好!

       可以使用DataTable的Select方法来获取满足条件的行:

       DataRow[] drs=ds.Tables[0].Select("TopicId<>'topicId[0]' AND TopicId<>'topicId[1]' AND TopicId<>'topicId[2]'");

       大概给出了一个思路,表达式你可以使用循环来拼接,这样性能好一些!


    周雪峰
    • 已标记为答案 鬼宿 2010年5月5日 7:53
    2010年5月2日 7:51
    版主
  • 比较快的方法是在数据库里加索引,再查询。DataTable在内存建的索引是比较简单的。

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    • 已标记为答案 鬼宿 2010年5月5日 7:53
    2010年5月2日 15:03
    版主

全部回复

  • 到底什么意思呢。不是很明白。

     

    是要得到dr.Read()中的topicId值不为topicIds中的值的列表是吗?

     

    在while循环里面定义一个变量

    string str="";

    str=topicIds.Find(x=>x==dr[0].ToString());

    if(str!=null)

    {

     //得到的str就是topicIds 中没有的 而在ds中存在的 topicId?

    }

    2010年5月1日 18:45
  • 接楼上,用 if(topics.Contains(dr[0].ToString())) 应该更快点吧,不过复杂度还是双重循环的。

    如果想要降低复杂度,那么把 List<string> 类型改成 HashTable ,可以把后面的降低到一个循环的复杂度(忘了复杂度的N(2) 还是O(1)之类的写法了,汗一个 = = )


    霸王
    2010年5月2日 3:23
  • 正解,这样做简洁直观
    2010年5月2日 5:42
  • 你好!

       可以使用DataTable的Select方法来获取满足条件的行:

       DataRow[] drs=ds.Tables[0].Select("TopicId<>'topicId[0]' AND TopicId<>'topicId[1]' AND TopicId<>'topicId[2]'");

       大概给出了一个思路,表达式你可以使用循环来拼接,这样性能好一些!


    周雪峰
    • 已标记为答案 鬼宿 2010年5月5日 7:53
    2010年5月2日 7:51
    版主
  • 比较快的方法是在数据库里加索引,再查询。DataTable在内存建的索引是比较简单的。

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful.
    Visual C++ MVP
    • 已标记为答案 鬼宿 2010年5月5日 7:53
    2010年5月2日 15:03
    版主
  • 谢谢 我试试

    2010年5月5日 7:53
  • 谢谢 
    2010年5月5日 7:53
  • 有点不明白
    2010年5月5日 7:53
  • 。。。。不对
    2010年5月5日 7:54