Linq to DataSet 之查询多个数据表

     通常一个数据集(DataSet)里,包含有一个或者多个数据表(DataTable)。数据表之间如果具有一定的关联关系,从而就表示一个关系型数据库。在接下来的例子里我们创建多个数据表(DataTable),使用Linq查询多个表中的数据。

    创建数据源

     

static DataSet BuildOneDTDataSet() {
            string[] nameset = { "张三", "李思思", "lisi", "王五", "路六", "欧赔", "夏琪","王二麻子" };
            string[] xbSet = { "", "", "", "", "", "", "", "" };
            int[] ageSet = { 12, 45, 23, 45, 78, 56, 12, 22 };
            int[] ScoreID = { 1, 2, 3, 4, 5, 6, 7, 8 };
            DataSet ds = new DataSet("PeopleDs");//创建名为"PeopleDs"的dataset对象
            DataTable dt = new DataTable("PeopleDt");//创建名为PeopleDt的datatable对象
            ds.Tables.Add(dt);
            dt.Columns.AddRange(
            new DataColumn[]{
            new DataColumn("Name",Type.GetType("System.String")),
            new DataColumn("XingBie",Type.GetType("System.String")),
            new DataColumn("Age",Type.GetType("System.Int32")), 
            new DataColumn("ScoreID",Type.GetType("System.Int32"))
            }
            );
            DataTable dtScore = new DataTable("Scores");//新建一个分数表
            dtScore.Columns.AddRange(
                new DataColumn[] { 
                new DataColumn("ScoreID",Type.GetType("System.Int32")),
                new DataColumn("Math",Type.GetType("System.Int32")),
                new DataColumn("Chinese",Type.GetType("System.Int32")),
                new DataColumn("English",Type.GetType("System.Int32"))
                }               
                );
            dtScore.Rows.Add(1,80,60,70);
            dtScore.Rows.Add(2, 40, 50, 60);
            dtScore.Rows.Add(3, 90, 90, 90);
            dtScore.Rows.Add(4, 30, 55, 77);
            for (int i = 0; i < nameset.Length; i++) //将数据写进一张datatable表
            {
                //DataRow row = dt.NewRow();
                DataRow row = dt.NewRow();
                row["Name"] = nameset[i];
                row["Age"] = ageSet[i];
                row["XingBie"] = xbSet[i];
                row["ScoreID"] = ScoreID[i];
                dt.Rows.Add(row);
            }
            ds.Tables.Add(dtScore);
            return ds;
        }

多表查询

 static void UseSelectTables() {
            DataSet ds = BuildOneDTDataSet();
            DataTable student = ds.Tables["PeopleDt"];//学生表
            DataTable score = ds.Tables["Scores"];//分数表
            //查询集合中所有的学生的成绩,没有成绩则不作为结果返回
            //var query = from stu in student.AsEnumerable()
            //            join sco in score.AsEnumerable()
            //            on stu.Field<int>("ScoreID") equals sco.Field<int>("ScoreID")
            //            into valGrp
            //            select valGrp;
            var query = from stu in student.AsEnumerable()
                        from sco in score.AsEnumerable()
                        where stu.Field<int>("ScoreID") == sco.Field<int>("ScoreID")
                        select new
                        {
                            Name = stu.Field<string>("Name"),
                            Math = sco.Field<int>("Math"),
                            Chinese = sco.Field<int>("Chinese"),
                            English = sco.Field<int>("English")

                        };
                        //group stu by stu.Field<string>("Name");
            foreach (var item in query)
            {
                Console.WriteLine("姓名:{0},数学{1},语文{2},英语{3}",item.Name,item.Math,item.Chinese,item.English);
            }


        
        }

关于多表查询需要输出两个表综合结果的时候,末尾select new{

a=...,

b=..,

}

最后循环输出的时候就可以直接item点出a,b了。

 

 

使用差集的方式查询出没有成绩的学生的详细信息,关于交并差集参见 Lambda常用函数

转载于:https://www.cnblogs.com/wangcongsuibi/p/8867849.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值