EF 左连接

1

var aList = menu.GetPagedList(page, limit, out totalCount, filter, orderBy).ToList(); //集合1
var bList = menu.GetAll().ToList(); //集合2
var data = from a in aList
           join b in bList on a.menuParentId equals b.id into temp
           from bb in temp.DefaultIfEmpty()
           select new
           {
               id=a.id,
               menuName = a.menuName,
               menuIcon = a.menuIcon,
               menuParentId = a.menuParentId,
               menuUrl = a.menuUrl,
               menuDescription = a.menuDescription,
               sort = a.sort,
               state = a.state,
               createTime = a.createTime,
               updateTime=a.updateTime,
               parentName = bb == null ?"":bb.menuName //特别要注意这个bb是否为null的情况
           };
var list = data.ToList();

注:上例中使用了DefaultIfEmpty操作符,它能够为实序列提供一个默认的元素。DefaultIfEmpty使用了泛型中的default关键字。default关键字对于引用类型将返回null,而对于值类型则返回0。对于结构体类型,则会根据其成员类型将它们相应地初始化为null(引用类型)或0(值类型)


我们可以不使用default,但在要DefaultIfEmpty中给定当空时的默认对象值。语句如下:

//left join, 为空时使用默认对象
var leftJoinQuery =  s in db.Student
join c in db.Course
on s.CourseCno equals c.Cno into gc
from gci in gc.DefaultIfEmpty(
new Course { Cname = "",Cperiod="" }     //设置为空时的默认值
)
select new
{
    ClassID = s.CourseCno,
    ClassName = gci.Cname,
};


猜你喜欢

转载自blog.csdn.net/Fanbin168/article/details/80083680
EF