ef 联合查询 理解

1.情景

用到数据库联合查询时比不可少的。今天用到一个外键在表示的时候需要转换成名称。自然需要联合查询,网上一查,最多的就是下面的这段代码,真挺经典且简单。

//ef
        var query2 = db.m_Dept.Join(db.m_User, a => a.ID, b => b.DeptID, (a, b) => new
            {
                deptname = a.DName,
                u

 第一次使用,不太理解 a和b 分别是啥?基本可以确定是m_Dept 和 m_User 表。那么怎么确定呢。两个变量a.ID 和 b.DeptID都是   a的。首先想象的还原一下语句吧

select a.Dnam,b.Uname from m_Dept a join m_User b on a.ID = b.DeptID 

 这下明白了,这关系要说吧,还真有点复杂,且不准备,就这样理解,a.ID和b.DeptID首先以m_Dept 为基础,那么 a.ID代码自己,b.DeptID代码外联的表m_User,由此条件产生的两个表a、b 分别代表m_Dept和 m_User。

2.代码

private void Add()
{
   List<m_Dept> lst = new List<m_Dept>{
   new m_Dept { DName = "开发", ID = "1" },
   new m_Dept { DName = "测试", ID = "2" },
   new m_Dept { DName = "财务", ID = "3" }
   };
 
   List<m_User> lstU = new List<m_User>{
   new m_User { UName = "张三", ID = "1"  , DeptID="1"},
   new m_User { UName = "李四", ID = "2" , DeptID="2"},
   new m_User { UName = "王五", ID = "3" , DeptID="1"}
   };
 
    using(TESTEntities db=new TESTEntities())
    {
        db.m_Dept.AddRange(lst);
        db.m_User.AddRange(lstU);
        db.SaveChanges();
    }
     
}
private void getlist()
{
    using (TESTEntities db = new TESTEntities())
    {
 
        //linq
        var query = from a in db.m_Dept
                    join b in db.m_User
                    on a.ID equals b.DeptID
                    select new
                    {
                        deptname = a.DName,
                        username = b.UName
                    };
        //ef
        var query2 = db.m_Dept.Join(db.m_User, a => a.ID, b => b.DeptID, (a, b) => new
            {
                deptname = a.DName,
                username = b.UName
            });
 
    }
 
}

上一篇:【thymeleaf】th:object


下一篇:MySQL JOIN的使用