• 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常用函数

  • 相关阅读:
    CGCDSSQ
    100200H
    斗地主
    借教室
    bzoj 3743
    17B
    能量项链
    589
    16-求连续数组和最大
    15-幸运数组4、7
  • 原文地址:https://www.cnblogs.com/wangcongsuibi/p/8867849.html
Copyright © 2020-2023  润新知