Lamda链接查询、左连接内连接、分组、分页、排序

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>();

注:左连接查询字段赋值时,一定要验证判断右表是否有数据,不然会报找不到数据的错误,内连接无所谓。