var query = from t1 in dt.AsEnumerable()
join t2 in dt2.AsEnumerable()
on t1.Field<int>("Addressid") equals t2.Field<int>("Addressid") into tmp
join t3 in dt3.AsEnumerable()
on t1.Field<int>("userid") equals t3.Field<int>("userid")
from t in tmp.DefaultIfEmpty()
orderby t1.Field<DateTime>("insertdate") descending
select new
{
Name = t1.Field<string>("Name"),
RealName = (t == null) ? string.Empty : t.Field<string>("RealName"),
nickname = t3.Field<string>("nickname")
};
左链接或右链接,使用DefaultIfEmpty()语法,采用些语法前需要用到into语法