Tải bản đầy đủ (.pdf) (35 trang)

Tuan11 c net linq p2

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.41 MB, 35 trang )

11/14/2018

Lập trình Ứng dụng quản lý
C#.NET
LINQ (tt)

Nội dung
 Query syntax

 Lambda syntax
 Các phép truy vấn trên LINQ

1


11/14/2018

Nội dung
 Query syntax
 Lambda syntax
 Các phép truy vấn trên LINQ

Query syntax
 Yêu cầu truy vấn

from n in list
where n < 3
select n;

foreach (int n in list)
{


if (n < 3) //xử lý n
}

2


11/14/2018

Query syntax - let
var list =
new List<int> { 1,2,3,4,5,6,7,8,9 };
var query = from n in list
where n > 3 && n < 8
let g = n * 2
let newList = new List<int> {1,2,3}
from l in newList
select new { l, r = g * l };

Query syntax – let (tt)
var query =

from l in File.ReadAllLines(path)
let parts = l.Split(';')
where parts[0] == server
select new {
Server = parts[0], Url = parts[1]
};

3



11/14/2018

Query syntax – join
Có ý nghĩa như phép kết bảng trong cơ
sở dữ liệu quan hệ
var query =
from c in Categories
join p in Products on c.CategoryID
equals p.CategoryID
select new {c.CategoryName,
p.ProductName};

Query Syntax – orderby
var query =
from m in
typeof(string).GetMethods()
where m.IsStatic == true
orderby m.Name [descending]
select m.Name;

4


11/14/2018

Query Syntax – group… by
var query =
from m in
typeof(string).GetMethods()

where m.IsStatic == true
orderby m.Name [descending]
group m by m.Name;
 group đã bao hàm ý nghĩa select nên

không cần select nữa

Query Syntax – group… by (tt)
Group nhiều thuộc tính
var query =
from p in Products
join c in Categories on p.CategoryID
equals c.CategoryID
group p by new {
c.CategoryID, c.CategoryName
};

5


11/14/2018

Query Syntax – group… by… into
var query =
from m in typeof(string).GetMethods()
where m.IsStatic == true
orderby m.Name [descending]
group m by m.Name into gr
select new {
Key = gr.Key, Slg = gr.Count()

};

Query Syntax – group… by… into (tt)

6


11/14/2018

Query Syntax
Các from có thể được viết lồng nhau
var query =
from list in lists
from num in list
select num;

Nội dung
 Query syntax

 Lambda syntax
 Các phép truy vấn trên LINQ

7


11/14/2018

Lambda Syntax
 Bản chất của LINQ là các lệnh truy vấn được


viết dưới dạng lambda syntax
 Query syntax dễ đọc, dễ hiểu hơn so với
lambda syntax
 Khi thực thi, query syntax sẽ được compiler
chuyển về lambda sysntax
 Dùng lambda syntax mới có thể tận dụng
được hết sức mạnh của LINQ

Lambda Syntax (tt)
 Các truy vấn LINQ được viết bằng query

syntax hồn tồn có thể được biểu diễn dưới
dạng lambda syntax
 Khơng có chiều ngược lại

 Nên kết hợp query syntax & lambda syntax.

8


11/14/2018

Nội dung
 Query syntax
 Lambda syntax

 Các phép truy vấn trên LINQ

Danh sách các phép toán


9


11/14/2018

Danh sách các phép toán (tt)

Phép chọn
Where: giữ lại các phần tử thoả điều kiện
Query Syntax
var query = from n in list
where n < 3
select n;
Lambda Syntax
var query = list.Where(n => n < 3);

10


11/14/2018

Phép chiếu
Select
Query Syntax
var query= from c in GetCustomers()
where c.City.StartWith(“A”)
select new { c.City, c.ContactName };

Lambda Syntax
var query = GetCustomers()

.Where(c => c.City.StartWith(“A”))
.Select(c => new { c.City,
c.ContactName });
//.Select(c => c);

Phép chiếu (tt)
Select (có index)
Lambda Syntax
int[] numbers = { 3, 9, 100, 4, 2, 6, 7, 1, 8 };
var query = numbers
.Select((n, idx) => new {idx, n})
.Where(item => item.idx % 2 == 0);

11


11/14/2018

Phép chiếu SelectMany
 SelectMany: dùng “phẳng hoá” tập hợp

Phép chiếu SelectMany (tt)

12


11/14/2018

Phép chiếu SelectMany (tt)


Phép chiếu SelectMany (tt)

13


11/14/2018

Phép kết Join
Query Syntax:
var query =
from c in Categories
join p in Products on c.CategoryID equals
p.CategoryID
select new {c.CategoryName, p.ProductName};

Lambda Syntax:
var query = Categories.Join(
Products,
c => c.CategoryID,
p => p.CategoryID,
(c,p) => new {c.CategoryName,
p.ProductName}
);

Phép kết Join trên nhiều thuộc tính
Query Syntax:
var query =
from s in ShoppingMalls
join h in Houses on
new { s.CouncilCode, s.PostCode }

equals new { h.CouncilCode,
h.PostCode }
select s;

14


11/14/2018

Phép kết Join trên nhiều thuộc tính (tt)
Lambda Syntax:
var query =
ShoppingMalls.Join(
Houses,
s => new { s.CouncilCode, s.PostCode },
h => new { h.CouncilCode, h.PostCode },
(s,h) => s
);

Phép toán sắp xếp
OrderBy, OrderByDescending

15


11/14/2018

Phép toán sắp xếp (tt)
ThenBy


Phép toán sắp xếp (tt)
Reverse: đảo dãy

{ 3, 2, 1 }

16


11/14/2018

Phép gom nhóm
Query Syntax:
var query =
from p in Products
join c in Categories on p.CategoryID
equals c.CategoryID
group p.ProductName by c.CategoryName;

Phép gom nhóm (tt)
Lambda Syntax:
var query = Products.Join(
Categories,
p => p.CategoryID,
c => c.CategoryID,
(p, c) => new { p.ProductName, c.CategoryName }
)
.GroupBy(i=>i.CategoryName, i=>i.ProductName);

17



11/14/2018

Phép gom nhóm (tt)

Phép gom nhóm (tt)
Query Syntax:
var query =
from p in Products
join c in Categories on p.CategoryID
equals c.CategoryID
group p by new { c.CategoryID, c.CategoryName }
into grpRow
select new {
grpRow.Key.CategoryID,
grpRow.Key.CategoryName,

I = grpRow.Count()
};

18


11/14/2018

Phép gom nhóm (tt)
Lambda Syntax:
var query = Products.Join(
Categories,
p => p.CategoryID,

c => c.CategoryID,
(p, c) => new { p, c.CategoryID, c.CategoryName
}
)
.GroupBy(c => new { c.CategoryID, c.CategoryName })
.Select(grpRow => new {
grpRow.Key.CategoryID,
grpRow.Key.CategoryName,
I = grpRow.Count()
}
);

Phép gom nhóm (tt)

19


11/14/2018

Các hàm tạo dữ liệu
Range: tạo 1 dãy số nguyên liên tiếp

Các hàm tạo dữ liệu (tt)
Repeat: tạo 1 dãy số chỉ chứa duy nhất 1 giá trị

Empty: tạo 1 dãy số có 0 phần tử

20



11/14/2018

Các hàm tạo dữ liệu (tt)
Any
 Dùng để kiểm tra dãy có rỗng hay khơng?

Các hàm tạo dữ liệu (tt)
Any
 Dùng để kiểm tra dãy có chứa phần tử nào thoả điều
kiện X hay không?

21


11/14/2018

Các hàm tạo dữ liệu (tt)
All
 Dùng để kiểm tra dãy có phải tất cả phần tử của dãy
đều thoả điều kiện X hay không?

Các hàm phân hoạch dữ liệu
Take: lấy n phần tử đầu tiên trong dãy

Skip: bỏ qua n phần tử đầu tiên trong dãy, lấy từ phần
tử thứ (n+1)

22



11/14/2018

Các hàm phân hoạch dữ liệu (tt)
TakeWhile: lấy các phần tử đầu cho tới khi thoả điều
kiện
3, 6, 9,
12, 15, 18,
21, 24, 27, 30

SkipWhile: bỏ các phần tử đầu cho tới khi thoả điều
kiện

Các hàm truy xuất phần tử
First: lấy phần tử đầu tiên trong dãy, “thảy”
InvalidOperationException khi dãy rỗng

23


11/14/2018

Các hàm truy xuất phần tử
First: lấy phần tử đầu tiên trong dãy, “thảy”
InvalidOperationException khi dãy rỗng

Các hàm truy xuất phần tử (tt)
FirstOrDefault: tương tự như First nhưng trả về null &
ko “thảy” exception khi dãy rỗng

Last, LastOrDefault


24


11/14/2018

Các hàm truy xuất phần tử (tt)
Single:
 Trả về duy nhất 1 item trong dãy có duy nhất 1 phần
tử.
 “Thảy” exception khi dãy có nhiều hơn 1 phần tử
 Dùng Single để ép dãy có 1 phần tử về đối tượng cụ
thể

Các hàm truy xuất phần tử (tt)
Single:

25


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×