本文共 2601 字,大约阅读时间需要 8 分钟。
左连接日常使用比较多,假如有两张表tbRoom和tbUserInfo。
得到房间住户信息:
C#var list = from r in tbRooms join ui in tbUserInfos on r.UserName equals ui.UserName into userrooms from ur in userrooms.DefaultIfEmpty() select new { FirstName = (ur.FirstName ==null ? "N/A": ur.FirstName), LastName = (ur.LastName == null ? "N/A":ur.LastName), RoomName = r.Name }; VB:Dim list = from r in tbRooms Group join ui in tbUserInfos on r.UserName equals ui.UserName into userrooms from ur in userrooms.DefaultIfEmpty() select FirstName = if(ur.FirstName = nothing, "N/A", ur.FirstName), LastName = if(ur.LastName = nothing, "N/A",ur.LastName), RoomName = r.Name
另一个多表左联接的例子:
C#**SQL:**SELECT id, name, jname, cname FROM userinfo u LEFT JOIN job j on u.job = j.jid LEFT JOIN city c on u.city = c.cid **C# Linq:**var list = ( from u in dc.userinfos join j in dc.jobs on u.job equals j.jid into j_join from x in j_join.DefaultIfEmpty() join c in dc.cities on u.city equals c.cid into c_join from v in c_join.DefaultIfEmpty() select new { id = u.id, name = u.name, jname = x.jname, cname = v.cname, /*u1=u,x1=x,v1=v*/ //不要用对象的方式 因为对象可能为null那么对象.属性就会抛异常 } ).ToList(); for (var i = 0; i < list.Count(); i++) { Console.WriteLine(list[i].name + '\t' + list[i].jname + '\t' + list[i].cname); //字段为null不报异常 //Console.WriteLine(list[i].u1.name+'\t'+list[i].x1.jname+'\t'+list[i].v1.cname+"\r\n"); //对象x1 v1 有可能为null 抛异常 } Console.ReadLine();
VB.NET
**SQL:**SELECT id, name, jname, cname FROM userinfo u LEFT JOIN job j on u.job = j.jid LEFT JOIN city c on u.city = c.cid **VB Linq:**Dim list = ( from u in dc.userinfos join j in dc.jobs on u.job equals j.jid Into j_join = Group from x in j_join.DefaultIfEmpty() join c in dc.cities on u.city equals c.cid Into c_join = Group from v in c_join.DefaultIfEmpty() select new with { .id = u.id, .name = u.name, .jname = x.jname, .cname = v.cname } ).ToList();
转载地址:http://bsmdi.baihongyu.com/