List<User> userList = new List<User> {
new User {Id=1,Name="LiBai",Age=20},
new User {Id=2,Name="DuFu",Age=21},
new User {Id=3,Name="ZhangSan",Age=22}
};
List<Book> bookList = new List<Book> {
new Book{ Id=1,Name="C",UserId=3},
new Book{ Id=1,Name="C++",UserId=2}
};
//内连接,分页.Skip(0).Take(10);正序排序.OrderBy(x=>x.Id);倒序排列.OrderByDescending(x=>x.Id)
var joinList = userList.Join(bookList, x => x.Id, y => y.UserId, (x, y) => new { x, y })
.Select(z => new User
{
Id = z.x.Id,
Name = z.x.Name,
Age = z.x.Age,
Dynasty = z.y.Name
}).Skip(0).Take(10).OrderBy(x=>x.Id).ToList();
//左连接①
var groupList = userList.GroupJoin(bookList, x => x.Id, y => y.UserId, (x, y) => y.DefaultIfEmpty()
.Select(z => new User
{
Id = x.Id,
Name = x.Name,
Age = x.Age,
Dynasty = z == null ? "" : z.Name
})).SelectMany(x => x).ToList();
//左连接②
var qry = userList.GroupJoin(bookList, foo => foo.Id, bar => bar.UserId, (x, y) => new { Foo = x, Bars = y })
.SelectMany(x => x.Bars.DefaultIfEmpty(), (x, y) => new { Foo = x.Foo, Bar = y }
).Select(z => new User
{
Id = z.Foo.Id,
Name = z.Foo.Name,
Age = z.Foo.Age,
Dynasty = z.Bar == null ? "" : z.Bar.Name
}).ToList<User>();
注:左连接查询字段赋值时,一定要验证判断右表是否有数据,不然会报找不到数据的错误,内连接无所谓。