100分探论[简单问题,复杂想法] DataTable.Select()方法究竟是何原理?
创建1个表: 
                         private   DataTable   BuildOriginData() 
                         { 
                                     DataTable   dt   =   new   DataTable(); 
                                     dt.Columns.Add( "ID ",   typeof(System.String)); 
                                     dt.Columns.Add( "Name ",   typeof(System.String));   
                                     for   (int   i   =   0;   i    <   50;   i++) 
                                     { 
                                                 DataRow   dr   =   dt.NewRow(); 
                                                 dr[0]   =   string.Format( "ID{0} ",   (i+1).ToString()); 
                                                 dr[1]   =   string.Format( "Name{0} ",   (i+1).ToString()); 
                                                 dt.Rows.Add(dr); 
                                     }   
                                     return   dt; 
                         }   
 现在的问题来了, 
 我用dt.Columns.Remove( "Name ")   //删除Name列   
 好了,这下dt.Select( "ID= 'XXXX ' ")   死活都会报InvalidIndexofRange   Exception了   
 ,请大家不要就我的方法进行讨论(说为何要删除列),我想了解Select方法的原理, 
 Name列按索引来看是1,我在后面ColumnCollection中删除最后1个索引,为何会影响Select方法呐,如果我删除ID列,然后   Select   Name列,如果出错,我还是能理解的,因为索引被重新定义了。 
 ps:我目前的解决方法:a.不要删除任何列   b.删除列后,在Select方法之前再加回来   
 期待朋友们踊跃讨论~
------解决方案--------------------删除列,先删除数据
------解决方案--------------------不知道你怎么处理的 
 我把你的代码拷过来 
 dt.Columns.Remove(  "Name " ); 
 DataRow[ ] dataRows = dt.Select(  "ID= 'ID11 ' " ); 
 dataRows 是ID11 
 //dt.Columns.Remove(  "Name " ); 
 DataRow[ ] dataRows = dt.Select(  "ID= 'ID11 ' " ); 
 dataRows 是ID11 和Name11 
 并未报错 
 你跟踪下你的程序 
 Remove( "Name ")后dt的数据是怎么样的 
 还有Remove后你获得的是一维数组了,不是2维数组 
 要看Select原理,你用Reflector看看相关的DLL
------解决方案--------------------你是不是做了别的处理?? 
 DataTable dt = new DataTable(); 
             dt.Columns.Add( "ID ", typeof(System.String)); 
             dt.Columns.Add( "Name ", typeof(System.String));   
             for (int i = 0; i  < 50; i++) 
             { 
                 DataRow dr = dt.NewRow(); 
                 dr[0] = string.Format( "ID{0} ", (i + 1).ToString()); 
                 dr[1] = string.Format( "Name{0} ", (i + 1).ToString()); 
                 dt.Rows.Add(dr); 
             } 
             dt.Columns.Remove( "Name "); 
             DataRow[] rows = dt.Select( "ID=