DataSet là một hình thức bộ nhớ trong của dữ liệu quan hệ và từ lâu đã là một phần chủ yếu của việc truy cập dữ liệu trong thế giới .NET. LNQ to Dataset cho phép sử dụng các toán tử truy vấn chuẩn để truy vấn đến dữ liệu trong DataTable hay DataSet.

Trước khi bắt đầu truy vấn một DataSet dùng LINQ to Dataset, Dataset cần được nạp dữ liệu bằng cách dùng lớp DataAdapter hay dùng LINQ to SQL. LINQ to Dataset làm việc với Dataset có kiểu (typed Dataset) và không kiểu (untyped Dataset). Với Dataset không kiểu, LINQ to Dataset cung cấp các phương thức mở rộng như Field<T> cho phép gán kiểu vào truy vấn.

Trở lại ví dụ về hai bảng GenreReview trong cơ sở dữ liệu ngocminhADO

Chúng ta nạp dữ liệu từ bảng GenreReview vào Dataset bằng lớp DataAdapter, truy vấn LINQ được tạo và vòng lặp foreach được dùng để hiển thị kết quả.

Mã VB:


Module Module1

  Sub Main()

    ' tạo chuỗi kết nối

    Dim connectString As String = System.Configuration.ConfigurationManager.

            ConnectionStrings("LinqFirst.My.MySettings.ngocminhADOConnectionString")

            .ToString()

   ' tạo câu truy vấn SQL

   Dim sqlSelect As String = "SELECT * FROM Genre;" + "SELECT * FROM Review;"

   Dim sqlCnn As SqlConnection = New SqlConnection(connectString)

   ' mở kết nối

   sqlCnn.Open()

   ' dùng lớp DataAdapter để nạp dữ liệu vào Dataset

   Dim da As New SqlDataAdapter

   da.SelectCommand = New SqlCommand(sqlSelect, sqlCnn)

   da.TableMappings.Add("Table", "Genre")

   da.TableMappings.Add("Table1", "Review")

   Dim ds As New DataSet()

   da.Fill(ds)

   ' thiết lập quan hệ hai DataTable trong Dataset

  Dim dr As DataRelation = ds.Relations.Add("FK_Genre_Review",

       ds.Tables("Genre").Columns("ID"),

       ds.Tables("Review").Columns("GenreId"))

  Dim genre As DataTable = ds.Tables("Genre")

  Dim review As DataTable = ds.Tables("Review")

  ' tạo và thực thi truy vấn LINQ to Dataset

  Dim query = From d In genre.AsEnumerable() 

             Join e In review.AsEnumerable()

             On d.Field(Of Integer)("ID") 

                  Equals e.Field(Of Integer)("GenreId")

            Select New Music With {

              .GenreID = d.Field(Of Integer)("ID"),

              .GenreName = d.Field(Of String)("Name"),

              .ReviewID = e.Field(Of Integer)("ID"),

              .ReviewTitle = e.Field(Of String)("Title")

             }

   ' Hiển thị kết quả

   For Each e In query

     Console.WriteLine("Genre Id = {0} , Name = {1} , Title = {2}", 

                   e.GenreID, e.GenreName, e.ReviewTitle)

   Next

 End Sub

 Class Music

   Public Property GenreID As Integer

   Public Property GenreName As String

   Public Property ReviewID As Integer

   Public Property ReviewTitle As String

 End Class

End Module

Mã C#:


class Programm

{

  static void Main(string[] args)

 {

  // tạo chuỗi kết nối

  string connectString = System.Configuration.ConfigurationManager.

             ConnectionStrings("LinqFirst.My.MySettings.ngocminhADOConnectionString").

                  ToString();

  // tạo câu truy vấn SQL

  string sqlSelect = "SELECT * FROM Genre;" + "SELECT * FROM Review;";

  // dùng lớp DataAdapter để nạp dữ liệu vào Dataset

  SqlDataAdapter da = new SqlDataAdapter(sqlSelect, connectString);

  da.SelectCommand = New SqlCommand(sqlSelect, sqlCnn);

  da.TableMappings.Add("Table", "Genre");

  da.TableMappings.Add("Table1", "Review");

  Dim ds As New DataSet();

  da.Fill(ds);

  // thiết lập quan hệ hai DataTable trong Dataset

  DataRelation dr  = ds.Relations.Add("FK_Genre_Review",

         ds.Tables["Genre"].Columns["ID"],

         ds.Tables["Review"].Columns["GenreId"]);

  DataTable genre = ds.Tables["Genre"];

  DataTable review = ds.Tables["Review"];

  // tạo và thực thi truy vấn LINQ to Dataset

  var query = from d in genre.AsEnumerable()

       join e in review.AsEnumerable()

       on d.Field<int>("ID") equals

            e.Field<int> ("GenreId")

      select new {

           GenreID = d.Field<int>("ID"),

           GenreName = d.Field<int> ("Name"),

           ReviewID = e.Field<int> ("ID"),

           ReviewTitle = e.Field<int>("Title")

     };

   // Hiển thị kết quả

  foreach ( var e in query ){

    Console.WriteLine("Genre Id = {0} , Name = {1} , Title = {2}", 

           e.GenreID, e.GenreName, e.ReviewTitle);

    }

  }

}

< Học LINQ