void FillDataSetUsingLinqToSql(LinqBooksDataSet dataSet)
        {
            var linqBooks = new LinqBooksDataContext(); //  准备LINQtoSQLDataContext

            var publisherQuery = from publisher in linqBooks.Publisher
                                 select new { publisher.ID, publisher.Name };   //  查询数据表

            var bookQuery = from book in linqBooks.Book
                            where book.PubDate.Value.Year > 1950
                            select new
            {
                book.ID,
                book.Title,
                book.Subject,
                book.Publisher,
                Price = book.Price.HasValue ? book.Price.Value : 0
            };

            foreach (var publisher in publisherQuery)
            {
                dataSet.Publisher.AddPublisherRow(publisher.ID, publisher.Name, null, null);
            }

            foreach (var book in bookQuery)
            {
                dataSet.Book.AddBookRow(book.ID, null, null, 0, book.Price, DateTime.MinValue, dataSet.Publisher.FindByID(book.Publisher), book.Subject, null, book.Title);
            }
        }
        private void btnTestLoading_Click(object sender, EventArgs e)
        {
            //  加载DataSet
            DataSet dataSet = new DataSet();

            //FillDataSetUsingDataAdapter(dataSet);
            FillDataSetUsingLinqToSql(dataSet);
            DataTable publisherTable = dataSet.Tables[0];
            DataTable bookTable      = dataSet.Tables[1];

            //var publisherBooks = from publisher in publisherTable.AsEnumerable()
            //                     join book in bookTable.AsEnumerable()
            //                         on publisher.Field<Guid>("ID") equals book.Field<Guid>("publisher")    //  用出版商ID作为连接条件连接Publisher和Book表
            //                     select new //  从两张表中获取数据
            //                     {
            //                         Publisher = publisher.Field<String>("Name"),
            //                         Book = book.Field<String>("Title")
            //                     };
            dataSet.Relations.Add("PublisherBooks", publisherTable.Columns["ID"], bookTable.Columns["Publisher"]);  //  创建出版商和其图书之间的关系
            var publisherBooks = from publisher in publisherTable.AsEnumerable()
                                 from book in publisher.GetChildRows("PublisherBooks")
                                 select new
            {
                Publisher = publisher.Field <String>("Name"),
                Book      = book.Field <String>("Title")
            };

            var filteredBooks = from book in bookTable.AsEnumerable()   //  将DataTable转换为IEnumerable<DataRow>
                                where book.Field <String>("Title").StartsWith("L")
                                select new
            {
                Title = book.Field <String>("Title"),                       //  使用Field操作符获取字段的值
                Price = book.Field <decimal?>("Price")                      //  Field操作符将透明地处理可空类型
            };

            LinqBooksDataSet dataSet2 = new LinqBooksDataSet();

            FillDataSetUsingLinqToSql(dataSet2);
            var query = from publisher in dataSet2.Publisher
                        join book in dataSet2.Book
                        on publisher.ID equals book.Publisher
                        select new
            {
                Publisher = publisher.Name,
                Book      = book.Title
            };

            dataGridView1.DataSource = query.ToList();
            dataGridView2.DataSource = filteredBooks.ToList();
        }