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 Genre và Review trong cơ sở dữ liệu ngocminhADO
Chúng ta nạp dữ liệu từ bảng Genre và Review 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); } } }
Ý kiến bài viết