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