zoukankan      html  css  js  c++  java
  • Linq to DataTable 左连接

    所先创建2个DataTable并对其赋值,来进行模拟.

    DataTable dt1 = new DataTable();
    dt1.Columns.Add("ID", typeof(int));
    dt1.Columns.Add("Name", typeof(string));
    dt1.Columns.Add("GradeId", typeof(int));
    
    DataTable dt2 = new DataTable();
    dt2.Columns.Add("ID", typeof(int));
    dt2.Columns.Add("Name", typeof(string));
    
    for (int i = 0; i < 6; i++)
     {
         DataRow dr1 = dt1.NewRow();
         dr1["ID"] = i + 1;
         dr1["Name"] = "zzq" + (i + 1);
         dr1["GradeId"] = i + 1;
         dt1.Rows.Add(dr1);
    }
    for (int i = 0; i < 4; i++)
     {
          DataRow dr2 = dt2.NewRow();
          dr2["ID"] = i + 1;
          dr2["Name"] = i + 1 + "班";
          dt2.Rows.Add(dr2);
     }
    

     

    需求大概是这样的。

    查询出的数据应该包括(ID,NAME,GradeName)

    但有个问题是

    b对象和a对象关联查询出来到temp对象中第4条和第5条数据为null.

    刚开以为直接取temp的数据就OK了,可是报了值不能为null的错误

    所以看了一下temp查出来的数据其中4和5查出来的数据为null,这样拿不到需求想要的结果

    所以在GradeName中加了一个三元表达式的判断,如下代码。

    var reslut = (from b in dt1.AsEnumerable()
                  join a in dt2.AsEnumerable()
                  on new { temp = b.Field<int>("GradeId") } equals new { temp = a.Field<int>("ID") }
                  into temp
                  from t in temp.DefaultIfEmpty()
                  select 
                  new {ID=b.Field<int>("ID"),Name=b.Field<string>("Name"),GradeName = t==null?0:t["Name"] }).ToList();

    最终显示结果:

     

    亲,帮到您了吗?楼主也刚入行没多久,希望能给刚入行的同学们一点小帮助。

    也希望走在前面的前辈们能给些好的建议和意见。 

  • 相关阅读:
    JSP学习笔记(一)
    【转】Key Presses
    【转】Event Driven Programming
    【转】Getting an Image on the Screen
    【转】Setting up SDL 2 on Visual Studio 2019 Community
    Windows定时任务copy到nfs目录
    DLL转存为IL文件及修改后重新生成DLL文件
    【转】Setting up SDL 2 on MinGW
    【转】Setting up SDL 2 on Code::Blocks 12.11
    【转】Setting up SDL on Windows
  • 原文地址:https://www.cnblogs.com/since87/p/3375250.html
Copyright © 2011-2022 走看看