1.自连接,直接join即可
2.左连接,除了join之外,还需要加上:DefaultIfEmpty(),这个是用来给定这一行没有匹配上的默认值,引用类型为null,值类型为0
3.右连接,哪个表(如表a)要右连接(显示全部行值),直接把这个表(表a)放到最上面的from就可以了,其实就是换一个表的左连接
4.连接后使用了from cc in aacc.DefaultIfEmpty()后,join之后的那个行号就不能再使用了,否则报没有定义的错误;右表只能使用cc来引用表的字段;且不能引用join之前的那个列表的字段
from aa in list1
join cc in list2 on aa.name equals cc.name into aacc --一旦join之后,这一行就没有作用了,只能使用下面一行的行标
from cc1 in aacc.DefaultIfEmpty()
select new book{
name = cc.name //错误,cc这个行标已经不能再使用了
name = cc1.name //正确
bookid = cc1.id //错误,list2中没有id字段
bookid = aa.id //正确
}