LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG 2
Language Integrated Query (LINQ)
ộ N i dung
Giới thiệu LINQ LINQ to Object LINQ to XML LINQ to ADO.NET
using System; using System.Collections.Generic; namespace Demo01 { class Program { static void Main(string[] args) { string[]greetings={"hello world","hello LINQ","hello
Apress" };
ớ ệ Gi i thi u LINQ
Trước khi có LINQ
List result = new List();
foreach (string greeting in greetings)
{
if (greeting.EndsWith("LINQ"))
{
result.Add(greeting);
}
}
foreach (string item in result) {
Console.WriteLine(item);
}
Console.ReadLine();
}
}
}
using System; using System.Linq; namespace Demo01 { class Program { static void Main(string[] args) { string[]greetings = {"hello world", "hello LINQ", "hello
Apress" };
var items = from s in greetings
ớ ệ Gi i thi u LINQ
where s.EndsWith("LINQ") select s;
foreach (var item in items) Console.WriteLine(item);
} } }
Khi có LINQ
ớ ệ Gi i thi u LINQ
Language Integrated Query (LINQ) là ngôn ngữ truy vấn hợp nhất trên các loại dữ liệu khác nhau.
Với LINQ, bạn có thể truy vấn nhiều nguồn dữ liệu khác nhau trong C#: đối tượng (object), cơ sở dữ liệu SQL, tài liệu XML, mô hình dữ liệu thực thể (entity data model).
Đưa ra khả năng lập trình mới trong .NET - Giải
pháp lập trình hợp nhất
VB
Others…
C#
.NET LanguageIntegrated Query
LINQ enabled data sources LINQ enabled data sources
LINQ enabled ADO.NET LINQ enabled ADO.NET
LINQ To XML
LINQ To Objects
LINQ To Datasets
LINQ To SQL
LINQ To Entities
ớ ệ Gi i thi u LINQ
Objects Objects
Relational Relational
XMLXML
LINQ provides one programming model for all types of data (objects, SQL, XML, DataSets)
ớ ệ Gi i thi u LINQ
Tất cả các thao tác truy vấn LINQ gồm 3 hành
động chính: Lấy nguồn dữ liệu Tạo truy vấn Thực thi truy vấn
LINQ to Object
Sử dụng LINQ để truy vấn tập hợp các đối tượng
dưới dạng IEnumerable hoặc IEnumerable
Ví dụ:
int[ ] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
List
"WWF", "WPF"};
LINQ to Object
static void Main(string[] args) { int[ ] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; var lowNums = from n in numbers where n < 5 select n; Console.WriteLine("Numbers < 5:"); foreach (var x in lowNums){ Console.WriteLine(x); } }
LINQ to Object
static void Main(string[] args) { string[] names = { "Alonso", "Zheng", "Smith", "Jones", "Smythe", "Small", "Ruiz", "Hsieh", "Jorgenson", "Ilyich", "Singh", "Samba", "Fatimah" }; var queryResults = from n in names where n.StartsWith("S") select n; foreach (var item in queryResults) { Console.WriteLine(item); } }
static void Main(string[] args)
{
List
new Customer { ID="A", City="New York", Country="USA", Region="North America", Sales=9999 }, new Customer { ID="B", City="Mumbai", Country="India", Region="Asia", Sales=8888 }, new Customer { ID="C", City="Karachi", Country="Pakistan", Region="Asia", Sales=7777 }};
LINQ to Object
var queryResults = from c in customers where c.Region == "Asia" select c; foreach (Customer c in queryResults) { Console.WriteLine(c); } }
LINQ to XML
LINQ to XML
Cung cấp 1 công cụ mạnh trong việc truy vấn
XML
var sp = (from c in
XElement.Load("SanPham.xml").Elements("SanPham")
select new
{
MaSanPham = (string)c.Element("MaSanPham"), TenSanPham = (string)c.Element("TenSanPham"), MaLoai = (string)c.Element("MaLoai"), DonGia = (string)c.Element("DonGia"), }).ToArray(); dgSanPham.DataSource = sp;
LINQ to DataSet
LINQ to DataSet giúp truy vấn đối tượng
Dataset dễ dàng và nhanh chóng
string str = "server = localhost; database = QLBH; uid=sa; pwd = 123456"; SqlConnection con = new SqlConnection(str); con.Open(); SqlDataAdapter da = new SqlDataAdapter("Select * From SanPham", con); DataSet ds = new DataSet(); da.Fill(ds, "SanPham"); var sp = (from sanpham in ds.Tables["SanPham"].AsEnumerable() select new {MaSanPham=sanpham["MaSanPham"],
TenSanPham=sanpham["TenSanPham"],
MaLoai=sanpham["MaLoai"], DonGia=sanpham["DonGia"]}).ToArray();
dgSanPham.DataSource = sp; con.Close();
LINQ to SQL
LINQ to SQL là một phiên bản Object
-Relational Mapping (ORM).
Database
DataContext
Table
Class
View
Class
Column
Field / Property
Relationship
Field / Property
Stored Procedure
Method
LINQ to SQL – Lớp DataContext
Là một lớp kết nối đến CSDL Chuyển câu truy vấn thành câu lệnh SQL Đảm nhận việc tương tác với CSDL Thay đổi CSDL thông qua phương thức
SubmitChanges()
LINQ to SQL
Ví dụ:
Cấu trúc LINQ to SQL
Application
db.Customers.Add(c1); c2.City = “Seattle"; db.Customers.Remove(c3);
from c in db.Customers where c.City == "London" select c.CompanyName
Enumerate
Objects
SubmitChanges()
LINQ to SQL
Rows
SQL Query or SProc
DML( Data Manipulation Language) or SProcs
INSERT INTO Customer … UPDATE Customer … DELETE FROM Customer …
SELECT CompanyName FROM Customer WHERE City = 'London'
Ví dụ: Quản lý bán hàng
Ví dụ: Quản lý bán hàng
Ví dụ: Quản lý bán hàng
Ví dụ: Quản lý bán hàng
Ví dụ: Quản lý bán hàng
Thiết kế giao diện
DataClassesDataContext data = new
DataClassesDataContext();
var listsanpham = from sanpham in data.SanPhams select new { sanpham.MaSanPham,
sanpham.TenSanPham,
sanpham.MaLoai, sanpham.DonGia };
dgSanPham.DataSource = listsanpham;
Ví dụ: Quản lý bán hàng
Load_SanPham()
DataClassesDataContext data = new
DataClassesDataContext();
SanPham sp = new SanPham(); sp.MaSanPham = txtMaSanPham.Text.Trim(); sp.TenSanPham = txtTenSanPham.Text; sp.MaLoai = cboLoai.SelectedValue.ToString(); sp.DonGia =Convert.ToDecimal(txtDonGia.Text); data.SanPhams.InsertOnSubmit(sp); data.SubmitChanges();
Ví dụ: Quản lý bán hàng
Insert_SanPham()
DataClassesDataContext data = new
DataClassesDataContext();
SanPham sp = (from sanpham in data.SanPhams where sanpham.MaSanPham ==
txtMaSanPham.Text.Trim()
select sanpham).Single
Ví dụ: Quản lý bán hàng
Delete_SanPham()
DataClassesDataContext data = new
DataClassesDataContext();
SanPham sp = (from sanpham in data.SanPhams where sanpham.MaSanPham ==
txtMaSanPham.Text.Trim()
select sanpham).Single
sp.TenSanPham = txtTenSanPham.Text; sp.MaLoai = cboLoai.SelectedValue.ToString(); sp.DonGia = Convert.ToDecimal(txtDonGia.Text); data.SubmitChanges();
Ví dụ: Quản lý bán hàng
Update_SanPham()
LINQ vs ADO.NET
LINQ là tập mở rộng cho phép viết các câu truy vấn ngay trong các ngôn ngữ lập trình. ADO.NET là công nghệ cho phép các ứng dụng có thể kết nối và làm việc với các loại CSDL khác nhau
LINQ không phải là một công nghệ được tạo
ra để thay thế ADO.NET
LINQ và 3Layers
GUI
var query = from ……
Business logic
where…… select ……
Data Access
DataClassesDataContext()
Data
Nhiệm vụ về nhà