DataSet中有两个表:
表1:Table:表中有一列‘大学名称’
表2:Table1:表中有一列‘第一志愿’
现在要实现如下功能:
1、查询 表2中所有‘第一志愿’和表1中某一指定‘大学名称’相匹配的所有行的总数;
2、将上述查询出的结果生成一张新表;
ado.net c# 初学者,望各位老师不吝赐教!
表1:Table:表中有一列‘大学名称’
表2:Table1:表中有一列‘第一志愿’
现在要实现如下功能:
1、查询 表2中所有‘第一志愿’和表1中某一指定‘大学名称’相匹配的所有行的总数;
2、将上述查询出的结果生成一张新表;
ado.net c# 初学者,望各位老师不吝赐教!
如果楼主一定要用你现在这种别扭的方式,你继续问,我们再答
from t1 in Table, t2 in Table2
where t2.第一志愿==t1.大学名称
select column1, column2
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;