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();

    最终显示结果:

     

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

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

  • 相关阅读:
    GRUB引导——menu.lst的写法
    条形码类型及常见条形码介绍
    Tmux:终端复用器
    find+*的问题
    find命令之exec
    Linux core 文件介绍
    C语言中返回字符串函数的四种实现方法
    C语言中的volatile
    Stars
    Game with Pearls
  • 原文地址:https://www.cnblogs.com/since87/p/3375250.html
Copyright © 2011-2022 走看看