c# DataSet 中 多表查询

Janfesir 2013-06-02 08:08:13
DataSet中有两个表:
表1:Table:表中有一列‘大学名称’
表2:Table1:表中有一列‘第一志愿’
现在要实现如下功能:
1、查询 表2中所有‘第一志愿’和表1中某一指定‘大学名称’相匹配的所有行的总数;
2、将上述查询出的结果生成一张新表;


ado.net c#

初学者,望各位老师不吝赐教!
...全文
794 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
A_Smart 2013-06-03
  • 打赏
  • 举报
回复
使用LINQ技术,很方便的。不得不说LINQ很强大。
Janfesir 2013-06-03
  • 打赏
  • 举报
回复
非常感谢!
mycodeis0000 2013-06-02
  • 打赏
  • 举报
回复
就用3楼 LINQ查询就好了
csdnFUCKINGSUCKS 2013-06-02
  • 打赏
  • 举报
回复

            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;
人生导师 2013-06-02
  • 打赏
  • 举报
回复
你可以使用Linq来对DataSet进行查询就可以的 from t1 in Table, t2 in Table2 where t2.第一志愿==t1.大学名称 select column1, column2
  • 打赏
  • 举报
回复
楼主,这样太难受了吧,获取数据的时候,把表一和表二的内容联合查询出来放到一个dataset里面不就好了? 如果楼主一定要用你现在这种别扭的方式,你继续问,我们再答

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧