DataSet中有两个表:
              表1:Table:表中有一列‘大学名称’
              表2:Table1:表中有一列‘第一志愿’
    现在要实现如下功能:
              1、查询 表2中所有‘第一志愿’和表1中某一指定‘大学名称’相匹配的所有行的总数;
              2、将上述查询出的结果生成一张新表;
    ado.net  c#    初学者,望各位老师不吝赐教!

解决方案 »

  1.   

    楼主,这样太难受了吧,获取数据的时候,把表一和表二的内容联合查询出来放到一个dataset里面不就好了?
    如果楼主一定要用你现在这种别扭的方式,你继续问,我们再答
      

  2.   

    你可以使用Linq来对DataSet进行查询就可以的
    from t1 in Table, t2 in Table2
    where t2.第一志愿==t1.大学名称
    select column1, column2
      

  3.   


                DataSet ds = new DataSet();
                DataColumn dc = null;
                DataTable dt1 = new DataTable("Students");
                //设置自增列
                dc = dt1.Columns.Add("ID", Type.GetType("System.Int32"));
                dc.AutoIncrement = true;
                dc.AutoIncrementSeed = 1;
                dc.AutoIncrementStep = 1;            //学生名字
                dt1.Columns.Add("Name", Type.GetType("System.String"));
                //第一志愿
                dt1.Columns.Add("1stSchool", Type.GetType("System.String"));
                //第二志愿
                dt1.Columns.Add("2ndSchool", Type.GetType("System.String"));            //初始化一些数据
                dt1.Rows.Add(new object[] { null, "zhangsan", "北大", "武大" });
                dt1.Rows.Add(new object[] { null, "lisi", "清华", "复旦" });
                dt1.Rows.Add(new object[] { null, "wangwu", "北大", "北语" });
                dt1.Rows.Add(new object[] { null, "taier", "南大", "农大" });            DataTable dt2 = new DataTable("Schools");
                //设置自增列
                dc = dt2.Columns.Add("ID", Type.GetType("System.Int32"));
                dc.AutoIncrement = true;
                dc.AutoIncrementSeed = 1;
                dc.AutoIncrementStep = 1;
                //学校名字
                dt2.Columns.Add("Name", Type.GetType("System.String"));            //初始化一些数据
                dt2.Rows.Add(new object[] { null, "北大" });
                dt2.Rows.Add(new object[] { null, "清华" });
                dt2.Rows.Add(new object[] { null, "复旦" });
                dt2.Rows.Add(new object[] { null, "上戏" });
                //添加至DataSet
                ds.Tables.Add(dt1); //ds.Tables[0] 学生表
                ds.Tables.Add(dt2); //ds.Tables[1] 学校表            //找出校名为"北大"的这一行记录
                DataRow dr = ds.Tables[1].Select().SingleOrDefault(s => s["Name"].ToString() == "北大");
                //获取第一志愿的学校名字与北大那条记录的名字值相等的记录 即为需要获取的记录
                DataRow[] result = ds.Tables[0].Select().Where(s => s["1stSchool"].ToString() == dr["Name"].ToString()).ToArray();            
                //创建结果表(注:表结构必须与取出记录行的结构一致,否则会报错)
                DataTable dtResult = new DataTable();
                //自增列
                dc = dtResult.Columns.Add("ID", Type.GetType("System.Int32"));
                dc.AutoIncrement = true;
                dc.AutoIncrementSeed = 1;
                dc.AutoIncrementStep = 1;            //学生名字
                dtResult.Columns.Add("Name", Type.GetType("System.String"));
                //第一志愿
                dtResult.Columns.Add("1stSchool", Type.GetType("System.String"));
                //第二志愿
                dtResult.Columns.Add("2ndSchool", Type.GetType("System.String"));            foreach (var item in result)
                {
                    //获取此行的所有值并添加至新的表(住:无法直接添加该行,会报已属于另一个表的错)
                    dtResult.Rows.Add(item.ItemArray);
                }            //在网格中显示
                dataGridView1.DataSource = dtResult;
      

  4.   

    使用LINQ技术,很方便的。不得不说LINQ很强大。