zoukankan      html  css  js  c++  java
  • 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常用函数

  • 相关阅读:
    饿了么P7级前端工程师进入大厂的面试经验
    前端程序员面试的坑,简历写上这一条信息会被虐死!
    这次来分享前端的九条bug吧
    移动端开发必会出现的问题和解决方案
    创建一个dynamics 365 CRM online plugin (八)
    创建一个dynamics 365 CRM online plugin (七)
    创建一个dynamics 365 CRM online plugin (六)
    创建一个dynamics 365 CRM online plugin (五)
    使用User Primary Email作为GUID的问题
    怎样Debug Dynamics 365 CRM Plugin
  • 原文地址:https://www.cnblogs.com/wangcongsuibi/p/8867849.html
Copyright © 2011-2022 走看看