static void Main(string[] args)
        { 
            DataColumn dc1 = new DataColumn("c1", typeof(System.Double));
            DataColumn dc2 = new DataColumn("c2", typeof(System.Double));
            DataColumn dc3 = new DataColumn("c3", typeof(System.Double));
            DataColumn dc4 = new DataColumn("c4", typeof(System.Double));            DataTable dt = new DataTable();
            dt.Columns.Add(dc1);
            dt.Columns.Add(dc2);
            dt.Columns.Add(dc3);
            dt.Columns.Add(dc4);
             
            DataRow dr = dt.NewRow();
            dr["c1"] = 6164.97;
            dr["c2"] = 3164.97;
            dr["c3"] = 3000.0;
            dr["c4"] = 0.0;
            dt.Rows.Add(dr);
            dt.AcceptChanges();            DataRow[] dsx = dt.Select("c1=c2+c3+c4");
            
            DataRow[] dsx1 = dt.Select("6164.97=3164.97+3000.0+0.0");
            //为什么这两个Select查询出来的结果不一样
            Console.Read();
        }SelectDataTableDataTable.Select

解决方案 »

  1.   

    6164.97=3164.97+3000.0+0.0 是常量表达式 为真的话 就不过滤数据了 所以还是一条dt.Select("c1=c2+c3+c4"); 不知道 这个是是否支持 但可以换一种思路 如果从数据库返回数据
    可以先判读是否相等 返回一个标识  比如( case when (c1=c2+c3+c4) then '1' else '0' end) flag如果手动创建 那道理也一样 编码实现就是了
    然后判断 dt.Select("flag='1'")
      

  2.   

     DataRow[] dsx1 = dt.Select(" 1=1 ");
     会过滤什么?
      

  3.   

                DataColumn dc1 = new DataColumn("c1", typeof(System.Decimal));
                DataColumn dc2 = new DataColumn("c2", typeof(System.Decimal));
                DataColumn dc3 = new DataColumn("c3", typeof(System.Decimal));
                DataColumn dc4 = new DataColumn("c4", typeof(System.Decimal));
                DataColumn dc5 = new DataColumn("c5", typeof(System.Decimal));            dc5.Expression = "c1=c2+c3+c4";            DataTable dt = new DataTable();
                dt.Columns.Add(dc1);
                dt.Columns.Add(dc2);
                dt.Columns.Add(dc3);
                dt.Columns.Add(dc4);
                dt.Columns.Add(dc5);            DataRow dr = dt.NewRow();
                dr["c1"] = 6164.97;
                dr["c2"] = 3164.97;
                dr["c3"] = 3000.00;
                dr["c4"] = 0;
                dt.Rows.Add(dr);
                dt.AcceptChanges();
                DataRow[] dsx = dt.Select("c5=1");            DataRow[] dsx1 = dt.Select("6164.97=3164.97+3000.0+0.0");数据类型问题.
      

  4.   

    根本没理解DataTable.Select的用法