SlideShare une entreprise Scribd logo
1  sur  7
I.Tại sao lại LINQ ra đời?
Đã lâu lắm rồi, hơn 2 thập niên, ngành công nghiệp phần mềm mới chứng kiến một cuộc
đổi thay mang tính bước ngoặc về mặt ngôn ngữ. Đó chính là LINQ, một cuộc cách tân
khá táo bạo. Được gọi là "Back to the future", LINQ mang hơi hướng của một ngôn ngữ
lập trình KHÔNG hướng đối tượng. Thật lạ, Paradigm OO đã đi đến điểm ổn định cao
nhất và tưởng rằng nó sẽ chết trên đỉnh vinh quang đó. Nhưng không, LINQ thổi vào đó
một luồng gió mới. Thật ra, bản chất của nó chính là thống nhất sự khác biệt giữa hai mô
hình : Đối tượng và Dữ liệu. Sự khác biệt này chính là rào cản lớn nhất mà trong vòng
mấy chục năm qua ngành công nghiệp phần mềm phải "sống chung với lũ". Một cách
nôm na, giờ đây, chúng ta chỉ cần biết một ngôn ngữ mà thôi, không phải biết thêm SQL,
XPath...
Đi xa hơn sự thống nhất về cách thức truy vấn dữ liệu, các công nghệ hỗ trợ đằng sau
LINQ như ORM đã làm cho việc lập trình trở nên đơn giản hơn, gọn gàng hơn.

Nói một cách dễ hình dung, sự xung đột giữa 2 paradigm OO và Data trông giống như sự
xung đột giữa các hệ tư tưởng và nó dai dẵng như cuộc xung đột của người Palestine và
Israel. Nếu sự "Trung gian hòa giải" để giúp 2 bên "ngồi lại với nhau" của Mỹ, Châu Âu,
Nga hay cả Liên Hiệp Quốc đều thất bại thì chúng ta cũng có hàng loạt các công cụ trung
gian ORM của hãng thứ ba như Hibernate, ORM, BizBlox,...chưa đủ tạo ra sự yên tâm.
Các ORM tool này rốt cục cũng chỉ là tạm thời - vẫn không thể nào giải quyết được tận
gốc rễ của vấn đề. Thậm chí dự án ObjectSpace của gã khổng lồ Microsoft vẫn đã chết
ngay khi chưa kịp ra đời. Người ta cố gắng giải quyết vấn đề này bằng cách khác, sáng
tạo hơn. Và có vẻ như LINQ chính là một giải pháp hay. Một phương pháp luận sáng tạo
đã được sử dụng: Trời không chịu đất thì đất chịu trời. Với LINQ, chúng ta sẽ thấy sự
"nhượng bộ" rõ ràng của OO. Nó cố gắng tiếp cận Data, nó đồng thời tự nâng cao năng
lực của chính nó.
        -Bên Java có Hibernate thì LINQ cũng tương tự như vậy, nó đưa ra khả năng lập
trình mới trong .NET kiểu truy vấn :Sql DB, Objects và Xml
        -Giải pháp lập trình hợp nhất, đem đến khả năng truy vấn dữ liệu theo cú pháp
SQL trực tiếp trong C# hay VB.NET, áp dụng cho tất cả các dạng dữ liệu từ đối tượng
đến CSDL quan hệ và XML.
        -Xử lý thông tin hay dữ liệu là nhiệm vụ quan trọng nhất của bất kỳ phần mềm
nào và một trong những trở ngại chính mà các nhà phát triển hiện nay phải đối mặt là
khác biệt giữa ngôn ngữ lập trình hướng đối tượng và ngôn ngữ truy vấn dữ liệu, vấn đề
càng phức tạp hơn với sự xuất hiện của XML (eXtensible Markup Language - ngôn ngữ
đánh dấu mở rộng).
        -Hiện tại, cách phổ biến nhất để ứng dụng lấy dữ liệu từ các hệ cơ sở dữ liệu
(CSDL) là sử dụng SQL (Structure Query Language - ngôn ngữ truy vấn cấu trúc). SQL
có cú pháp rất khác với những ngôn ngữ lập trình phổ dụng như C# và VB.NET, do vậy
lập trình viên phải nhọc công "hàn gắn" hai thực thể khác biệt này với nhau trong mỗi dự
án phần mềm.
        -Một vấn đề khác với SQL là nó chỉ dùng để truy vấn dữ liệu trong các CSDL
dạng quan hệ. Nếu muốn truy cập dữ liệu XML hay dạng khác (như trang HTML,
email...), nhà phát triển lại phải sử dụng cú pháp truy vấn khác (XPath/XQuery).
Để giảm gánh nặng thao tác trên nhiều ngôn ngữ khác nhau và cải thiện năng suất lập
trình, Microsoft đã phát triển giải pháp tích hợp dữ liệu cho .NET Framework có tên gọi
là LINQ (Language Integrated Query), đây là thư viện mở rộng cho các ngôn ngữ lập
trình C# và Visual Basic.NET (có thể mở rộng cho các ngôn ngữ khác) cung cấp khả
năng truy vấn trực tiếp dữ liệu đối tượng, CSDL và XML.

        -Truy vấn dữ liệu đối tượng trong bộ nhớ
Dữ liệu cần phải đổ vào bộ nhớ để xử lý, nhưng một khi tách khỏi nơi gốc của nó thì khả
năng truy vấn rất kém. Bạn có thể dễ dàng truy vấn thông tin khách hàng móc nối với
thông tin đơn hàng của họ từ CSDL SQL Server nhưng không dễ gì thực hiện tương tự
với thông tin trong bộ nhớ. Trong môi trường .NET, thông tin (trong bộ nhớ) thường
được thể hiện ở dạng các đối tượng và trước LINQ, không có cách nào để móc nối các
đối tượng hay thực hiện bất kỳ thao tác truy vấn nào. LINQ chính là giải pháp cho vấn đề
này.
        -Với Microsoft .NET platform, ngôn ngữ hỗ trợ chính đó chính là C# và VB.NET.
Những người lập trình viên họ thường gặp rắc rối, và cảm thấy khó chịu với việc truy cập
dữ liệu ở những nguồn khác nhau. Đặc biệt là 2 loại dữ liệu XML và CSDL.Với CSDL là
đông đảo nhất về dữ liệu lưu trữ.
Các vấn đề về truy suất dữ liệu như sau:
1 - Chúng ta không lập trình tương tác với CSDL tại cấp độ native language. Vì thế lỗi
thường khó phát hiện rõ. Khó khăn trong việc quản lý lỗi xảy ra.
2 - Kiểu dữ liệu khác nhau trong mỗi nguồn dữ liệu ở XML và CSDL. Đặc biệt date và
time.
Chính các nhà phát triển ở Microsoft đưa ra 1 nền tảng mới trong việc truy vấn dữ liệu ở
bất kể các nguồn khác nhau(Object, XML, CSDL). Đó là LINQ, đây là công nghệ mà hổ
trợ cơ chế truy vấn dữ liệu ở tất cả các kiểu. Những kiểu nay bao gồm mãng(List,
Vector), XML, CSDL và hơn thế nữa.
Điều quan trọng nhất, LINQ là tất cả về truy vấn, kết quả sau khi truy vấn có thể là tập
hợp các đối tượng cùng loại, có thể là 1 đối tượng đơn, có thể là tập hợp con của các field
từ 1 đối tượng. Kết quả trả về của LINQ người ta gọi là sequence.Hầu hết sequence là
IEnumerable<T> với T là KDL của những đối tượng trong sequence.
LINQ nó sẽ cung cấp cách duy nhất để truy cập dữ liệu từ bất kể nguồn dữ liệu nào với
cú pháp giống nhau.
       II.LINQ là gì ?
Theo định nghĩa trên thư viên MSDN của Microsoft LINQ là một tập hợp các phần mở
rộng của .Net Frame Work. Nó bao gồm ngôn ngữ tích hợp truy vấn, thiếp lập và chuyển
đổi hoạt động. Nó mở rông C# và Visual Basic với cú pháp ngôn ngữ bản địa cho các
truy vấn và cung cấp các thư viện lớp để tận dụng những khả năng thuận lợi của nó.
        III.Vậy LINQ bao gồm những gì ?
Theo wikipedia :
Kiến trúc của LINQ trong. Net Framework 3.5
Toán tử operator chuẩn:

1.Select / SelectMany                              2.Where

3.Sum / Min / Max / Average / Aggregate            4.Join / GroupJoin

5.Take / TakeWhile                                 6.Skip / SkipWhile

7.OfType                                           8.Concat

9.OrderBy / ThenBy                                 10.Reverse

11.GroupBy                                         12.Distinct

13.Union / Intersect / Except                      14.EqualAll

15.First / FirstOrDefault / Last / LastOrDefault   16.Single

17.ElementAt                                       18.Any / All / Contains

19.Count

1.Select / SelectMany Các câu Chọn thực hiện một dự vào bộ sưu tập để chọn tất cả các thành viên dữ liệu
tạo nên các đối tượng hoặc một tập hợp con của nó. Các toán tử SelectMany thực hiện một lần để chiếu
nhiều-( "lồng" nghĩa là), nếu các đối tượng trong bộ sưu tập có một bộ sưu tập như một thành viên dữ liệu,
SelectMany có thể được dùng để chọn toàn bộ phụ thu. Người sử dụng nguồn cung cấp một chức năng,
như là một đại biểu, các dự án mà các thành viên dữ liệu. Lựa chọn tạo ra một đối tượng của một kiểu khác
nhau, trong đó có cả một số hoặc nhiều thành viên như là dữ liệu như là lớp gốc. Lớp phải đã được xác Ở
đâu

2.Where Các nhà điều hành ở đâu cho phép định nghĩa của một tập các quy tắc làm vị được đánh giá cho
từng đối tượng trong bộ sưu tập, trong khi các đối tượng đó không phù hợp với quy luật sẽ được lọc đi.

3.Sum / Min / Max / Average / Aggregate Các toán tử phải mất một predicate để lấy một giá trị nhất định
số từ mỗi thành phần trong bộ sưu tập và sử dụng nó để tìm tổng hợp, tối thiểu, tối đa, hoặc tổng hợp các
giá trị trung bình của tất cả các yếu tố trong bộ sưu tập tương ứng.

4.Join / GroupJoin Các toán tử tham gia thực hiện một bên tham gia vào hai bộ sưu tập, dựa trên kết hợp
các phím cho từng đối tượng trong bộ sưu tập. Phải mất hai chức năng là đại diện, một cho mỗi bộ sưu tập,
mà nó thực thi trên mỗi đối tượng trong bộ sưu tập để lấy chìa khóa từ đối tượng. Nó cũng mất một đại diện
thông qua đó người dùng xác định các yếu tố dữ liệu đó, từ hai yếu tố phù hợp, nên được sử dụng để tạo
ra các đối tượng kết quả. Các nhà điều hành GroupJoin thực hiện một nhóm tham gia. Giống như các nhà
điều hành chọn, kết quả của một gia đang instantiations của một tầng lớp khác nhau, với tất cả các thành
viên dữ liệu của cả hai loại của các đối tượng nguồn gốc hoặc một tập hợp con của họ.

5.Take / TakeWhile Hãy chọn các nhà khai thác các đối tượng n đầu tiên từ một bộ sưu tập, trong khi các
nhà điều hành TakeWhile, mà phải mất một predicate, chọn những đối tượng phù hợp với predicate.

6.Skip / SkipWhile Bỏ qua và SkipWhile các nhà khai thác được bổ sung của Take và TakeWhile - họ bỏ
qua các đối tượng n đầu tiên từ bộ sưu tập một, hoặc những đối tượng phù hợp với một predicate (đối với
trường hợp của SkipWhile).

7.OfType   Các toán tử OfType được sử dụng để chọn các phần tử của một loại nhất định.

8.Concat Các toán tử concat concatenates hai bộ sưu tập.

9.OrderBy / ThenBy Các toán tử OrderBy được sử dụng để xác định phân loại chính đặt hàng của các yếu
tố trong bộ sưu tập một theo một số trọng điểm. Mặc định là sắp đặt thứ tự tăng dần, để đảo ngược trật tự,
các nhà điều hành OrderByDescending là để được sử dụng. ThenBy và ThenByDescending xác định tiếp
theo đặt hàng của các yếu tố. Chức năng để trích xuất các giá trị quan trọng từ đối tượng được xác định bởi
người sử dụng như là một đại diện.

10.Reverse Ngược lại toán tử một bộ sưu tập đảo ngược.

11.GroupBy Các toán tử GroupBy mất một đại biểu rằng chất chiết xuất một giá trị khóa và trả về một bộ
sưu tập của IGrouping<Key, Values> đối tượng IGrouping<Key, Values> cho mỗi giá trị quan trọng khác
biệt. Các đối tượng IGrouping sau đó có thể được sử dụng để liệt kê tất cả các đối tượng cho một giá trị
đặc biệt quan trọng.

12.Distinct Các toán tử riêng biệt loại bỏ trường hợp lặp của một giá trị quan trọng từ một bộ sưu tập. Chức
năng để lấy giá trị quan trọng là để được cung cấp như một đại biểu.

13.Union / Intersect / Except Các toán tử được sử dụng để thực hiện một công đoàn, giao lộ và các hoạt
động khác nhau trên hai trình tự, tương ứng.

14.EqualAll Các toán tử EqualAll kiểm tra xem tất cả các yếu tố trong hai bộ sưu tập đều được bình đẳng.

15.First / FirstOrDefault / Last / LastOrDefault Các toán tử phải mất một predicate. Các toán tử đầu tiên trở
về các yếu tố đầu tiên mà sản lượng làm vị đúng hoặc ném một ngoại lệ nếu không có gì phù hợp. Các toán
tử FirstOrDefault cũng giống như các nhà khai thác đầu tiên ngoại trừ việc nó trả về giá trị mặc định cho
kiểu phần tử (thường là một tham chiếu null) trong trường hợp không có gì phù hợp với predicate. Các toán
tử cuối truy nguyên tố cuối cùng để phù hợp với làm vị, hoặc ném một ngoại lệ trong trường hợp không có
gì phù hợp. LastOrDefault Các trả về giá trị phần tử mặc định nếu không có gì phù hợp.

16.Single Các toán tử đơn mất một predicate và trả về các yếu tố đó phù hợp với predicate. Một trường
hợp ngoại lệ được ném nếu không có hoặc nhiều hơn một yếu tố phù hợp với predicate.

17.ElementAt Các nhà điều hành ElementAt lấy phần tử tại một chỉ số được đưa ra trong bộ sưu tập.

18.Any / All / Contains Các toán tử Bất kỳ kiểm tra nếu có bất kỳ yếu tố trong bộ sưu tập phù hợp với
predicate. Nó không chọn các phần tử, nhưng trả về đúng cho một trận đấu. Tất cả các toán tử kiểm tra
xem tất cả các yếu tố phù hợp với predicate. Chứa các toán tử kiểm tra nếu bộ sưu tập có một giá trị nhất
định.

19.Count Các toán tử Count đếm số lượng các yếu tố trong bộ sưu tập được.

The Standard Query operator API cũng chỉ rõ một số nhà khai thác chuyển đổi một bộ sưu tập vào loại hình
khác: [1]
AsEnumerable: chuyển đổi các bộ sưu tập để loại IEnumerable<T>

ToQueryable: chuyển đổi các bộ sưu tập để loại IQueryable<T>

ToArray: chuyển đổi các bộ sưu tập vào một mảng.

ToList: chuyển đổi các bộ sưu tập để loại IList<T>

ToDictionary: chuyển đổi các bộ sưu tập để IDictionary<K, T> loại IDictionary<K, T> lập chỉ mục bằng phím
K.

ToLookup: chuyển đổi các bộ sưu tập để ILookup<K, T> loại ILookup<K, T> lập chỉ mục bằng phím K.

Cast: chuyển đổi một tổ chức phi chung IEnumerable bộ sưu tập vào một trong các IEnumerable<T> bởi
mỗi yếu tố để T loại. Ném một ngoại lệ cho các kiểu không tương thích.

OfType: chuyển đổi một tổ chức phi chung IEnumerable bộ sưu tập vào một trong các IEnumerable<T> Chỉ
có yếu tố của loại T được bao gồm.

Các toán tử tìm kiếm sẽ được xác định trong giao diện IEnumerable<T> như phương pháp khuyến khích
chung chung, và triển khai thực hiện cụ thể được cung cấp trong lớp Sequence Kết quả là, lớp học nào mà
thực hiện các giao diện IEnumerable<T> có quyền truy cập đến những phương pháp này và là queryable.
LINQ cũng định nghĩa một tập các chung Func đại biểu, trong đó xác định các loại đại biểu xử lý bằng các
phương pháp truy vấn LINQ. Bất kỳ chức năng bọc trong một đoàn Func có thể được sử dụng bởi LINQ.
Mỗi phương thức trả về một đối tượng thực hiện các giao diện IEnumerable<T> do đó, đầu ra của một
người có thể được sử dụng như các đầu vào khác, kết quả composability truy vấn. Chức năng, tuy nhiên,
có lazily đánh giá, nghĩa là, các bộ sưu tập được liệt kê chỉ khi kết quả được lấy. Đếm được tạm dừng ngay
sau khi trận đấu được tìm thấy, và các đại biểu đánh giá trên nó. Khi một đối tượng tiếp theo trong bộ sưu
tập kết quả được lấy ra, việc liệt kê các nguồn thu được tiếp tục vượt ra ngoài yếu tố đã được đánh giá. Tuy
nhiên, hoạt động nhóm, như GroupBy và OrderBy, cũng như Sum, Min, Max, trung bình và tổng hợp, yêu
cầu dữ liệu từ tất cả các yếu tố trong bộ sưu tập, và một lực lượng đánh giá mong muốn. LINQ không một
tính năng tôi ưu hoa truy vấn và các nhà điều hành tìm kiếm sẽ được đánh giá theo thứ tự chúng được viện
dẫn. Các phương pháp LINQ được compilable trong NET Framework 2.0.,

Phần mở rộng Ngôn ngữ

Trong khi LINQ chủ yếu thực hiện như một thư viện cho. NET Framework 3.5, nó cũng định nghĩa một tập
các phần mở rộng ngôn ngữ có thể được thực hiện bởi tùy chọn ngôn ngữ để thực hiện truy vấn một ngôn
ngữ lớp đầu tiên xây dựng và cung cấp đường cú pháp để viết các truy vấn. Những phần mở rộng ngôn
ngữ đã bước đầu được thực hiện trong C # 3.0, VB 9,0 và Oxygene, với các ngôn ngữ khác như F # và
Nemerle có hỗ trợ công bố sơ bộ. Các phần mở rộng ngôn ngữ bao gồm: [2]

Truy vấn cú pháp: Một là ngôn ngữ Việt để chọn một cú pháp truy vấn rằng nó sẽ nhận ra nguyên bản.
Những từ khóa ngôn ngữ phải được dịch bởi trình biên dịch cho các cuộc gọi phương pháp thích hợp LINQ.
Các ngôn ngữ có thể thực hiện sắp xếp lại nhà điều hành và tối ưu hóa khác ở mức từ khóa.

Ngầm đánh máy biến: nâng cao này cho phép các biến được khai báo mà không có chỉ định các loại của
họ. Các ngôn ngữ C # 3.0 và Oxygene tuyên bố chúng với những từ khóa var Trong VB9.0, việc sử dụng
các từ khóa Dim mà không loại tờ khai hoàn thành việc kê khai như vậy. Các đối tượng này vẫn còn mạnh
mẽ; cho các đối tượng sử dụng các trình biên dịch suy luận kiểu suy ra loại của các biến. Điều này cho
phép kết quả của các truy vấn được chỉ định và kết quả của họ được xác định mà không khai báo kiểu của
các biến trung gian.

Chưa xác định người loại: loại Chưa xác định người cho phép các lớp học, có chứa dữ liệu khai báo thành
viên duy nhất, để được suy ra bởi trình biên dịch. Điều này là hữu ích cho việc chọn và tham gia vận hành,
các loại quả có thể khác biệt với các loại của các đối tượng ban đầu. Trình biên dịch này sử dụng kiểu suy
luận để xác định các lĩnh vực chứa trong các lớp học và tạo ra accessors và mutators cho các lĩnh vực này.
Đối tượng Initializer: initializers Object cho phép một đối tượng được tạo ra và khởi tạo trong một phạm vi
duy nhất, điều này cho phép tạo ra các đại biểu rằng các lĩnh vực chiết xuất từ một đối tượng, tạo một đối
tượng mới và gán dữ liệu để trích xuất các lĩnh vực của đối tượng mới trong một tuyên bố đơn , như là cần
thiết để chọn và tham gia vận hành.

Biểu thức Lambda: Lambda biểu thức được sử dụng để tạo ra các đại biểu nội tuyến với các mã khác. Điều
này cho phép các predicates và chức năng khai thác được ghi nội tuyến với các truy vấn.

Ví dụ, trong truy vấn để chọn tất cả các đối tượng trong bộ sưu tập một với SomeProperty ít hơn 10,

       int someValue = 5;

       var results = from c in someCollection

            let x = someValue * 2

            where c.SomeProperty < x

            select new {c.SomeProperty, c.OtherProperty};

       foreach (var result in results)

   {

         Console.WriteLine(result);

   }

các loại biến kết quả, c và tất cả các kết quả được suy ra bởi trình biên dịch - giả sử SomeCollection là
IEnumerable<SomeClass> c sẽ được SomeClass kết quả sẽ được IEnumerable<SomeOtherClass> và kết
quả sẽ được SomeOtherClass nơi SomeOtherClass sẽ là một trình biên dịch tạo ra lớp với SomeProperty
chỉ và tài sản OtherProperty và giá trị của họ thiết lập từ các điều khoản tương ứng của các đối tượng
nguồn. Các Toán tử sau đó được dịch ra các cuộc gọi phương thức như:

IEnumerable<SomeOtherClass> results =

   SomeCollection.Where

   (

         c => c.SomeProperty < (SomeValue * 2)

   )

   .Select

   (

         c => new {c.SomeProperty, c.OtherProperty}

   )

foreach (SomeOtherClass result in results)
{

    Console.WriteLine(result.ToString());

}



LINQ cung cấp:
      - LINQ to Objects
      - LINQ to XML
      - LINQ to SQL
      - LINQ to DataSets
      - Other providers

        -LINQ to Objects: Các nhà cung cấp được sử dụng để truy vấn trong bộ sưu tập
bộ nhớ, sử dụng công cụ truy vấn thực hiện tại địa phương của LINQ. Các mã được tạo ra
bởi nhà cung cấp này đề cập đến việc thực hiện các nhà khai thác truy vấn tiêu chuẩn như
được định nghĩa trong các lớp học Sequence và cho phép các bộ sưu tập Enumerable<T>
được truy vấn tại địa phương. Hiện hành thực hiện các LINQ to Đối tượng sử dụng ví dụ
như O (n) tuyến tính và tìm tra cứu đơn giản, và không phải là tối ưu hóa cho các truy
vấn phức tạp
        - LINQ to XML: Các LINQ to XML cung cấp dịch vụ chuyển đổi một tài liệu
XML với một bộ sưu tập của XElement đối tượng, mà sau đó truy vấn đối với việc sử
dụng động cơ thực hiện tại địa phương được cung cấp như một phần của việc thực hiện
các nhà điều hành truy vấn tiêu chuẩn [5.]
        - LINQ to SQL: Các LINQ to SQL cho phép các nhà cung cấp LINQ sẽ được sử
dụng để truy vấn SQL Server cũng như cơ sở dữ liệu SQL Server Compact cơ sở dữ liệu.
Kể từ khi dữ liệu SQL Server nằm trên máy chủ từ xa, và bởi vì nó đã bao gồm một công
cụ truy vấn, LINQ to SQL không sử dụng động cơ của LINQ truy vấn. Thay vào đó, nó
chuyển đổi một truy vấn LINQ cho một truy vấn SQL là sau đó gửi đến SQL Server cho
chế biến Tuy nhiên, kể từ SQL Server lưu trữ các dữ liệu như dữ liệu quan hệ và làm việc
với LINQ dữ liệu đóng gói trong các đối tượng., Hai đại diện phải được ánh xạ với nhau.
Vì lý do này, LINQ to SQL cũng định nghĩa khuôn khổ lập bản đồ. Lập bản đồ này được
thực hiện bằng cách xác định các lớp học tương ứng với các bảng trong cơ sở dữ liệu, và
có chứa tất cả hoặc một tập hợp con của các cột trong bảng dữ liệu như là các thành viên
Thư này, cùng với mô hình quan hệ khác chẳng hạn như các thuộc tính khóa chính được
quy định sử dụng LINQ to SQL-thuộc tính được xác định. Ví dụ
        [Table(Name="Customers")]
        public class Customer
        {
           [Column(IsPrimaryKey = true)]
           public int CustID;

             [Column]
             public string CustName;
      }
Hoàng Trung Kiên_THB(^_^)

Contenu connexe

Tendances

Báo cáo thực tập ngành Quản trị kinh doanh, quản trị khách sạn, lữ hành ZALO ...
Báo cáo thực tập ngành Quản trị kinh doanh, quản trị khách sạn, lữ hành ZALO ...Báo cáo thực tập ngành Quản trị kinh doanh, quản trị khách sạn, lữ hành ZALO ...
Báo cáo thực tập ngành Quản trị kinh doanh, quản trị khách sạn, lữ hành ZALO ...Viết thuê báo cáo thực tập giá rẻ
 
báo cáo bài tập lớn phân tích thiết kế hệ thống quản lý khách sạn
báo cáo bài tập lớn phân tích thiết kế hệ thống quản lý khách sạnbáo cáo bài tập lớn phân tích thiết kế hệ thống quản lý khách sạn
báo cáo bài tập lớn phân tích thiết kế hệ thống quản lý khách sạnnataliej4
 
ბანკები და ფინანსები #497
ბანკები და ფინანსები #497ბანკები და ფინანსები #497
ბანკები და ფინანსები #497BFM2015
 
ბანკები და ფინანსები #498
ბანკები და ფინანსები #498ბანკები და ფინანსები #498
ბანკები და ფინანსები #498BFM2015
 
章文嵩:使用LVS集群架设高可扩展的网络服务.pdf
章文嵩:使用LVS集群架设高可扩展的网络服务.pdf章文嵩:使用LVS集群架设高可扩展的网络服务.pdf
章文嵩:使用LVS集群架设高可扩展的网络服务.pdfXMourinho
 
瀏覽器的想像
瀏覽器的想像瀏覽器的想像
瀏覽器的想像Bob Chao
 
Children’s Voices for Human Rights Newsletter – Issue no.68
Children’s Voices for Human Rights Newsletter – Issue no.68Children’s Voices for Human Rights Newsletter – Issue no.68
Children’s Voices for Human Rights Newsletter – Issue no.68hrfmedia
 

Tendances (12)

Báo cáo thực tập ngành Quản trị kinh doanh, quản trị khách sạn, lữ hành ZALO ...
Báo cáo thực tập ngành Quản trị kinh doanh, quản trị khách sạn, lữ hành ZALO ...Báo cáo thực tập ngành Quản trị kinh doanh, quản trị khách sạn, lữ hành ZALO ...
Báo cáo thực tập ngành Quản trị kinh doanh, quản trị khách sạn, lữ hành ZALO ...
 
báo cáo bài tập lớn phân tích thiết kế hệ thống quản lý khách sạn
báo cáo bài tập lớn phân tích thiết kế hệ thống quản lý khách sạnbáo cáo bài tập lớn phân tích thiết kế hệ thống quản lý khách sạn
báo cáo bài tập lớn phân tích thiết kế hệ thống quản lý khách sạn
 
ბანკები და ფინანსები #497
ბანკები და ფინანსები #497ბანკები და ფინანსები #497
ბანკები და ფინანსები #497
 
Dhtml
DhtmlDhtml
Dhtml
 
070829 intra-SNS case-study
070829 intra-SNS case-study070829 intra-SNS case-study
070829 intra-SNS case-study
 
ბანკები და ფინანსები #498
ბანკები და ფინანსები #498ბანკები და ფინანსები #498
ბანკები და ფინანსები #498
 
章文嵩:使用LVS集群架设高可扩展的网络服务.pdf
章文嵩:使用LVS集群架设高可扩展的网络服务.pdf章文嵩:使用LVS集群架设高可扩展的网络服务.pdf
章文嵩:使用LVS集群架设高可扩展的网络服务.pdf
 
01.12.11
01.12.1101.12.11
01.12.11
 
Web2.0 and Ruby
Web2.0 and RubyWeb2.0 and Ruby
Web2.0 and Ruby
 
Bai Tap Vb
Bai Tap VbBai Tap Vb
Bai Tap Vb
 
瀏覽器的想像
瀏覽器的想像瀏覽器的想像
瀏覽器的想像
 
Children’s Voices for Human Rights Newsletter – Issue no.68
Children’s Voices for Human Rights Newsletter – Issue no.68Children’s Voices for Human Rights Newsletter – Issue no.68
Children’s Voices for Human Rights Newsletter – Issue no.68
 

Plus de google

Rolling Linq Wcf Silverlight Old4830
Rolling Linq Wcf Silverlight Old4830Rolling Linq Wcf Silverlight Old4830
Rolling Linq Wcf Silverlight Old4830google
 
Linq To Sql 1221970293242272 9
Linq To Sql 1221970293242272 9Linq To Sql 1221970293242272 9
Linq To Sql 1221970293242272 9google
 
Linq 1207579553462901 8
Linq 1207579553462901 8Linq 1207579553462901 8
Linq 1207579553462901 8google
 
Linq E Ef 1207668728621762 9
Linq E Ef 1207668728621762 9Linq E Ef 1207668728621762 9
Linq E Ef 1207668728621762 9google
 
Linq 1224887336792847 9
Linq 1224887336792847 9Linq 1224887336792847 9
Linq 1224887336792847 9google
 
Linq 090701233237 Phpapp01
Linq 090701233237 Phpapp01Linq 090701233237 Phpapp01
Linq 090701233237 Phpapp01google
 
L2s 090701234157 Phpapp02
L2s 090701234157 Phpapp02L2s 090701234157 Phpapp02
L2s 090701234157 Phpapp02google
 
Introduccion A Linq 1205779028184546 5
Introduccion A Linq 1205779028184546 5Introduccion A Linq 1205779028184546 5
Introduccion A Linq 1205779028184546 5google
 
Seminarv2 0 090609060123 Phpapp01
Seminarv2 0 090609060123 Phpapp01Seminarv2 0 090609060123 Phpapp01
Seminarv2 0 090609060123 Phpapp01google
 
Linqtosql 090629035715 Phpapp01
Linqtosql 090629035715 Phpapp01Linqtosql 090629035715 Phpapp01
Linqtosql 090629035715 Phpapp01google
 
Linq 090611123548 Phpapp02
Linq 090611123548 Phpapp02Linq 090611123548 Phpapp02
Linq 090611123548 Phpapp02google
 
Kdahlby 200908 Stldodn Linqinternals 090903222505 Phpapp01
Kdahlby 200908 Stldodn Linqinternals 090903222505 Phpapp01Kdahlby 200908 Stldodn Linqinternals 090903222505 Phpapp01
Kdahlby 200908 Stldodn Linqinternals 090903222505 Phpapp01google
 

Plus de google (12)

Rolling Linq Wcf Silverlight Old4830
Rolling Linq Wcf Silverlight Old4830Rolling Linq Wcf Silverlight Old4830
Rolling Linq Wcf Silverlight Old4830
 
Linq To Sql 1221970293242272 9
Linq To Sql 1221970293242272 9Linq To Sql 1221970293242272 9
Linq To Sql 1221970293242272 9
 
Linq 1207579553462901 8
Linq 1207579553462901 8Linq 1207579553462901 8
Linq 1207579553462901 8
 
Linq E Ef 1207668728621762 9
Linq E Ef 1207668728621762 9Linq E Ef 1207668728621762 9
Linq E Ef 1207668728621762 9
 
Linq 1224887336792847 9
Linq 1224887336792847 9Linq 1224887336792847 9
Linq 1224887336792847 9
 
Linq 090701233237 Phpapp01
Linq 090701233237 Phpapp01Linq 090701233237 Phpapp01
Linq 090701233237 Phpapp01
 
L2s 090701234157 Phpapp02
L2s 090701234157 Phpapp02L2s 090701234157 Phpapp02
L2s 090701234157 Phpapp02
 
Introduccion A Linq 1205779028184546 5
Introduccion A Linq 1205779028184546 5Introduccion A Linq 1205779028184546 5
Introduccion A Linq 1205779028184546 5
 
Seminarv2 0 090609060123 Phpapp01
Seminarv2 0 090609060123 Phpapp01Seminarv2 0 090609060123 Phpapp01
Seminarv2 0 090609060123 Phpapp01
 
Linqtosql 090629035715 Phpapp01
Linqtosql 090629035715 Phpapp01Linqtosql 090629035715 Phpapp01
Linqtosql 090629035715 Phpapp01
 
Linq 090611123548 Phpapp02
Linq 090611123548 Phpapp02Linq 090611123548 Phpapp02
Linq 090611123548 Phpapp02
 
Kdahlby 200908 Stldodn Linqinternals 090903222505 Phpapp01
Kdahlby 200908 Stldodn Linqinternals 090903222505 Phpapp01Kdahlby 200908 Stldodn Linqinternals 090903222505 Phpapp01
Kdahlby 200908 Stldodn Linqinternals 090903222505 Phpapp01
 

Dernier

Bahare Shariat Jild 5 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 5 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 5 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 5 By SadurshSharia Mufti Amjad Ali Azmibookbahareshariat
 
مختصر علم احكام القرآن فقه القرآن وفق منهج العرض
مختصر علم احكام القرآن فقه القرآن وفق منهج العرضمختصر علم احكام القرآن فقه القرآن وفق منهج العرض
مختصر علم احكام القرآن فقه القرآن وفق منهج العرضأنور غني الموسوي
 
Bahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali Azmibookbahareshariat
 
Bahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali Azmibookbahareshariat
 
TUYỂN TẬP 25 ĐỀ THI HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2023 CÓ ĐÁP ÁN (SƯU...
TUYỂN TẬP 25 ĐỀ THI HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2023 CÓ ĐÁP ÁN (SƯU...TUYỂN TẬP 25 ĐỀ THI HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2023 CÓ ĐÁP ÁN (SƯU...
TUYỂN TẬP 25 ĐỀ THI HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2023 CÓ ĐÁP ÁN (SƯU...Nguyen Thanh Tu Collection
 
FAIL REKOD PENGAJARAN.pptx fail rekod pengajaran
FAIL REKOD PENGAJARAN.pptx fail rekod pengajaranFAIL REKOD PENGAJARAN.pptx fail rekod pengajaran
FAIL REKOD PENGAJARAN.pptx fail rekod pengajaransekolah233
 
Bahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali Azmibookbahareshariat
 
TUYỂN TẬP 20 ĐỀ THI KHẢO SÁT HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2020 (CÓ Đ...
TUYỂN TẬP 20 ĐỀ THI KHẢO SÁT HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2020 (CÓ Đ...TUYỂN TẬP 20 ĐỀ THI KHẢO SÁT HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2020 (CÓ Đ...
TUYỂN TẬP 20 ĐỀ THI KHẢO SÁT HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2020 (CÓ Đ...Nguyen Thanh Tu Collection
 
Bahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali Azmibookbahareshariat
 

Dernier (11)

Bahare Shariat Jild 5 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 5 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 5 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 5 By SadurshSharia Mufti Amjad Ali Azmi
 
مختصر علم احكام القرآن فقه القرآن وفق منهج العرض
مختصر علم احكام القرآن فقه القرآن وفق منهج العرضمختصر علم احكام القرآن فقه القرآن وفق منهج العرض
مختصر علم احكام القرآن فقه القرآن وفق منهج العرض
 
Bahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 3 By SadurshSharia Mufti Amjad Ali Azmi
 
Bahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 1 By SadurshSharia Mufti Amjad Ali Azmi
 
Energy drink .
Energy drink                           .Energy drink                           .
Energy drink .
 
TUYỂN TẬP 25 ĐỀ THI HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2023 CÓ ĐÁP ÁN (SƯU...
TUYỂN TẬP 25 ĐỀ THI HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2023 CÓ ĐÁP ÁN (SƯU...TUYỂN TẬP 25 ĐỀ THI HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2023 CÓ ĐÁP ÁN (SƯU...
TUYỂN TẬP 25 ĐỀ THI HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2023 CÓ ĐÁP ÁN (SƯU...
 
LAR MARIA MÃE DE ÁFRICA .
LAR MARIA MÃE DE ÁFRICA                 .LAR MARIA MÃE DE ÁFRICA                 .
LAR MARIA MÃE DE ÁFRICA .
 
FAIL REKOD PENGAJARAN.pptx fail rekod pengajaran
FAIL REKOD PENGAJARAN.pptx fail rekod pengajaranFAIL REKOD PENGAJARAN.pptx fail rekod pengajaran
FAIL REKOD PENGAJARAN.pptx fail rekod pengajaran
 
Bahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 4 By SadurshSharia Mufti Amjad Ali Azmi
 
TUYỂN TẬP 20 ĐỀ THI KHẢO SÁT HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2020 (CÓ Đ...
TUYỂN TẬP 20 ĐỀ THI KHẢO SÁT HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2020 (CÓ Đ...TUYỂN TẬP 20 ĐỀ THI KHẢO SÁT HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2020 (CÓ Đ...
TUYỂN TẬP 20 ĐỀ THI KHẢO SÁT HỌC SINH GIỎI MÔN TIẾNG ANH LỚP 6 NĂM 2020 (CÓ Đ...
 
Bahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali AzmiBahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali Azmi
Bahare Shariat Jild 2 By SadurshSharia Mufti Amjad Ali Azmi
 

Linq

  • 1. I.Tại sao lại LINQ ra đời? Đã lâu lắm rồi, hơn 2 thập niên, ngành công nghiệp phần mềm mới chứng kiến một cuộc đổi thay mang tính bước ngoặc về mặt ngôn ngữ. Đó chính là LINQ, một cuộc cách tân khá táo bạo. Được gọi là "Back to the future", LINQ mang hơi hướng của một ngôn ngữ lập trình KHÔNG hướng đối tượng. Thật lạ, Paradigm OO đã đi đến điểm ổn định cao nhất và tưởng rằng nó sẽ chết trên đỉnh vinh quang đó. Nhưng không, LINQ thổi vào đó một luồng gió mới. Thật ra, bản chất của nó chính là thống nhất sự khác biệt giữa hai mô hình : Đối tượng và Dữ liệu. Sự khác biệt này chính là rào cản lớn nhất mà trong vòng mấy chục năm qua ngành công nghiệp phần mềm phải "sống chung với lũ". Một cách nôm na, giờ đây, chúng ta chỉ cần biết một ngôn ngữ mà thôi, không phải biết thêm SQL, XPath... Đi xa hơn sự thống nhất về cách thức truy vấn dữ liệu, các công nghệ hỗ trợ đằng sau LINQ như ORM đã làm cho việc lập trình trở nên đơn giản hơn, gọn gàng hơn. Nói một cách dễ hình dung, sự xung đột giữa 2 paradigm OO và Data trông giống như sự xung đột giữa các hệ tư tưởng và nó dai dẵng như cuộc xung đột của người Palestine và Israel. Nếu sự "Trung gian hòa giải" để giúp 2 bên "ngồi lại với nhau" của Mỹ, Châu Âu, Nga hay cả Liên Hiệp Quốc đều thất bại thì chúng ta cũng có hàng loạt các công cụ trung gian ORM của hãng thứ ba như Hibernate, ORM, BizBlox,...chưa đủ tạo ra sự yên tâm. Các ORM tool này rốt cục cũng chỉ là tạm thời - vẫn không thể nào giải quyết được tận gốc rễ của vấn đề. Thậm chí dự án ObjectSpace của gã khổng lồ Microsoft vẫn đã chết ngay khi chưa kịp ra đời. Người ta cố gắng giải quyết vấn đề này bằng cách khác, sáng tạo hơn. Và có vẻ như LINQ chính là một giải pháp hay. Một phương pháp luận sáng tạo đã được sử dụng: Trời không chịu đất thì đất chịu trời. Với LINQ, chúng ta sẽ thấy sự "nhượng bộ" rõ ràng của OO. Nó cố gắng tiếp cận Data, nó đồng thời tự nâng cao năng lực của chính nó. -Bên Java có Hibernate thì LINQ cũng tương tự như vậy, nó đưa ra khả năng lập trình mới trong .NET kiểu truy vấn :Sql DB, Objects và Xml -Giải pháp lập trình hợp nhất, đem đến khả năng truy vấn dữ liệu theo cú pháp SQL trực tiếp trong C# hay VB.NET, áp dụng cho tất cả các dạng dữ liệu từ đối tượng đến CSDL quan hệ và XML. -Xử lý thông tin hay dữ liệu là nhiệm vụ quan trọng nhất của bất kỳ phần mềm nào và một trong những trở ngại chính mà các nhà phát triển hiện nay phải đối mặt là khác biệt giữa ngôn ngữ lập trình hướng đối tượng và ngôn ngữ truy vấn dữ liệu, vấn đề càng phức tạp hơn với sự xuất hiện của XML (eXtensible Markup Language - ngôn ngữ đánh dấu mở rộng). -Hiện tại, cách phổ biến nhất để ứng dụng lấy dữ liệu từ các hệ cơ sở dữ liệu (CSDL) là sử dụng SQL (Structure Query Language - ngôn ngữ truy vấn cấu trúc). SQL
  • 2. có cú pháp rất khác với những ngôn ngữ lập trình phổ dụng như C# và VB.NET, do vậy lập trình viên phải nhọc công "hàn gắn" hai thực thể khác biệt này với nhau trong mỗi dự án phần mềm. -Một vấn đề khác với SQL là nó chỉ dùng để truy vấn dữ liệu trong các CSDL dạng quan hệ. Nếu muốn truy cập dữ liệu XML hay dạng khác (như trang HTML, email...), nhà phát triển lại phải sử dụng cú pháp truy vấn khác (XPath/XQuery). Để giảm gánh nặng thao tác trên nhiều ngôn ngữ khác nhau và cải thiện năng suất lập trình, Microsoft đã phát triển giải pháp tích hợp dữ liệu cho .NET Framework có tên gọi là LINQ (Language Integrated Query), đây là thư viện mở rộng cho các ngôn ngữ lập trình C# và Visual Basic.NET (có thể mở rộng cho các ngôn ngữ khác) cung cấp khả năng truy vấn trực tiếp dữ liệu đối tượng, CSDL và XML. -Truy vấn dữ liệu đối tượng trong bộ nhớ Dữ liệu cần phải đổ vào bộ nhớ để xử lý, nhưng một khi tách khỏi nơi gốc của nó thì khả năng truy vấn rất kém. Bạn có thể dễ dàng truy vấn thông tin khách hàng móc nối với thông tin đơn hàng của họ từ CSDL SQL Server nhưng không dễ gì thực hiện tương tự với thông tin trong bộ nhớ. Trong môi trường .NET, thông tin (trong bộ nhớ) thường được thể hiện ở dạng các đối tượng và trước LINQ, không có cách nào để móc nối các đối tượng hay thực hiện bất kỳ thao tác truy vấn nào. LINQ chính là giải pháp cho vấn đề này. -Với Microsoft .NET platform, ngôn ngữ hỗ trợ chính đó chính là C# và VB.NET. Những người lập trình viên họ thường gặp rắc rối, và cảm thấy khó chịu với việc truy cập dữ liệu ở những nguồn khác nhau. Đặc biệt là 2 loại dữ liệu XML và CSDL.Với CSDL là đông đảo nhất về dữ liệu lưu trữ. Các vấn đề về truy suất dữ liệu như sau: 1 - Chúng ta không lập trình tương tác với CSDL tại cấp độ native language. Vì thế lỗi thường khó phát hiện rõ. Khó khăn trong việc quản lý lỗi xảy ra. 2 - Kiểu dữ liệu khác nhau trong mỗi nguồn dữ liệu ở XML và CSDL. Đặc biệt date và time. Chính các nhà phát triển ở Microsoft đưa ra 1 nền tảng mới trong việc truy vấn dữ liệu ở bất kể các nguồn khác nhau(Object, XML, CSDL). Đó là LINQ, đây là công nghệ mà hổ trợ cơ chế truy vấn dữ liệu ở tất cả các kiểu. Những kiểu nay bao gồm mãng(List, Vector), XML, CSDL và hơn thế nữa. Điều quan trọng nhất, LINQ là tất cả về truy vấn, kết quả sau khi truy vấn có thể là tập hợp các đối tượng cùng loại, có thể là 1 đối tượng đơn, có thể là tập hợp con của các field từ 1 đối tượng. Kết quả trả về của LINQ người ta gọi là sequence.Hầu hết sequence là IEnumerable<T> với T là KDL của những đối tượng trong sequence. LINQ nó sẽ cung cấp cách duy nhất để truy cập dữ liệu từ bất kể nguồn dữ liệu nào với cú pháp giống nhau. II.LINQ là gì ? Theo định nghĩa trên thư viên MSDN của Microsoft LINQ là một tập hợp các phần mở rộng của .Net Frame Work. Nó bao gồm ngôn ngữ tích hợp truy vấn, thiếp lập và chuyển đổi hoạt động. Nó mở rông C# và Visual Basic với cú pháp ngôn ngữ bản địa cho các truy vấn và cung cấp các thư viện lớp để tận dụng những khả năng thuận lợi của nó. III.Vậy LINQ bao gồm những gì ? Theo wikipedia :
  • 3. Kiến trúc của LINQ trong. Net Framework 3.5 Toán tử operator chuẩn: 1.Select / SelectMany 2.Where 3.Sum / Min / Max / Average / Aggregate 4.Join / GroupJoin 5.Take / TakeWhile 6.Skip / SkipWhile 7.OfType 8.Concat 9.OrderBy / ThenBy 10.Reverse 11.GroupBy 12.Distinct 13.Union / Intersect / Except 14.EqualAll 15.First / FirstOrDefault / Last / LastOrDefault 16.Single 17.ElementAt 18.Any / All / Contains 19.Count 1.Select / SelectMany Các câu Chọn thực hiện một dự vào bộ sưu tập để chọn tất cả các thành viên dữ liệu tạo nên các đối tượng hoặc một tập hợp con của nó. Các toán tử SelectMany thực hiện một lần để chiếu nhiều-( "lồng" nghĩa là), nếu các đối tượng trong bộ sưu tập có một bộ sưu tập như một thành viên dữ liệu, SelectMany có thể được dùng để chọn toàn bộ phụ thu. Người sử dụng nguồn cung cấp một chức năng, như là một đại biểu, các dự án mà các thành viên dữ liệu. Lựa chọn tạo ra một đối tượng của một kiểu khác nhau, trong đó có cả một số hoặc nhiều thành viên như là dữ liệu như là lớp gốc. Lớp phải đã được xác Ở đâu 2.Where Các nhà điều hành ở đâu cho phép định nghĩa của một tập các quy tắc làm vị được đánh giá cho từng đối tượng trong bộ sưu tập, trong khi các đối tượng đó không phù hợp với quy luật sẽ được lọc đi. 3.Sum / Min / Max / Average / Aggregate Các toán tử phải mất một predicate để lấy một giá trị nhất định số từ mỗi thành phần trong bộ sưu tập và sử dụng nó để tìm tổng hợp, tối thiểu, tối đa, hoặc tổng hợp các giá trị trung bình của tất cả các yếu tố trong bộ sưu tập tương ứng. 4.Join / GroupJoin Các toán tử tham gia thực hiện một bên tham gia vào hai bộ sưu tập, dựa trên kết hợp các phím cho từng đối tượng trong bộ sưu tập. Phải mất hai chức năng là đại diện, một cho mỗi bộ sưu tập, mà nó thực thi trên mỗi đối tượng trong bộ sưu tập để lấy chìa khóa từ đối tượng. Nó cũng mất một đại diện thông qua đó người dùng xác định các yếu tố dữ liệu đó, từ hai yếu tố phù hợp, nên được sử dụng để tạo ra các đối tượng kết quả. Các nhà điều hành GroupJoin thực hiện một nhóm tham gia. Giống như các nhà
  • 4. điều hành chọn, kết quả của một gia đang instantiations của một tầng lớp khác nhau, với tất cả các thành viên dữ liệu của cả hai loại của các đối tượng nguồn gốc hoặc một tập hợp con của họ. 5.Take / TakeWhile Hãy chọn các nhà khai thác các đối tượng n đầu tiên từ một bộ sưu tập, trong khi các nhà điều hành TakeWhile, mà phải mất một predicate, chọn những đối tượng phù hợp với predicate. 6.Skip / SkipWhile Bỏ qua và SkipWhile các nhà khai thác được bổ sung của Take và TakeWhile - họ bỏ qua các đối tượng n đầu tiên từ bộ sưu tập một, hoặc những đối tượng phù hợp với một predicate (đối với trường hợp của SkipWhile). 7.OfType Các toán tử OfType được sử dụng để chọn các phần tử của một loại nhất định. 8.Concat Các toán tử concat concatenates hai bộ sưu tập. 9.OrderBy / ThenBy Các toán tử OrderBy được sử dụng để xác định phân loại chính đặt hàng của các yếu tố trong bộ sưu tập một theo một số trọng điểm. Mặc định là sắp đặt thứ tự tăng dần, để đảo ngược trật tự, các nhà điều hành OrderByDescending là để được sử dụng. ThenBy và ThenByDescending xác định tiếp theo đặt hàng của các yếu tố. Chức năng để trích xuất các giá trị quan trọng từ đối tượng được xác định bởi người sử dụng như là một đại diện. 10.Reverse Ngược lại toán tử một bộ sưu tập đảo ngược. 11.GroupBy Các toán tử GroupBy mất một đại biểu rằng chất chiết xuất một giá trị khóa và trả về một bộ sưu tập của IGrouping<Key, Values> đối tượng IGrouping<Key, Values> cho mỗi giá trị quan trọng khác biệt. Các đối tượng IGrouping sau đó có thể được sử dụng để liệt kê tất cả các đối tượng cho một giá trị đặc biệt quan trọng. 12.Distinct Các toán tử riêng biệt loại bỏ trường hợp lặp của một giá trị quan trọng từ một bộ sưu tập. Chức năng để lấy giá trị quan trọng là để được cung cấp như một đại biểu. 13.Union / Intersect / Except Các toán tử được sử dụng để thực hiện một công đoàn, giao lộ và các hoạt động khác nhau trên hai trình tự, tương ứng. 14.EqualAll Các toán tử EqualAll kiểm tra xem tất cả các yếu tố trong hai bộ sưu tập đều được bình đẳng. 15.First / FirstOrDefault / Last / LastOrDefault Các toán tử phải mất một predicate. Các toán tử đầu tiên trở về các yếu tố đầu tiên mà sản lượng làm vị đúng hoặc ném một ngoại lệ nếu không có gì phù hợp. Các toán tử FirstOrDefault cũng giống như các nhà khai thác đầu tiên ngoại trừ việc nó trả về giá trị mặc định cho kiểu phần tử (thường là một tham chiếu null) trong trường hợp không có gì phù hợp với predicate. Các toán tử cuối truy nguyên tố cuối cùng để phù hợp với làm vị, hoặc ném một ngoại lệ trong trường hợp không có gì phù hợp. LastOrDefault Các trả về giá trị phần tử mặc định nếu không có gì phù hợp. 16.Single Các toán tử đơn mất một predicate và trả về các yếu tố đó phù hợp với predicate. Một trường hợp ngoại lệ được ném nếu không có hoặc nhiều hơn một yếu tố phù hợp với predicate. 17.ElementAt Các nhà điều hành ElementAt lấy phần tử tại một chỉ số được đưa ra trong bộ sưu tập. 18.Any / All / Contains Các toán tử Bất kỳ kiểm tra nếu có bất kỳ yếu tố trong bộ sưu tập phù hợp với predicate. Nó không chọn các phần tử, nhưng trả về đúng cho một trận đấu. Tất cả các toán tử kiểm tra xem tất cả các yếu tố phù hợp với predicate. Chứa các toán tử kiểm tra nếu bộ sưu tập có một giá trị nhất định. 19.Count Các toán tử Count đếm số lượng các yếu tố trong bộ sưu tập được. The Standard Query operator API cũng chỉ rõ một số nhà khai thác chuyển đổi một bộ sưu tập vào loại hình khác: [1]
  • 5. AsEnumerable: chuyển đổi các bộ sưu tập để loại IEnumerable<T> ToQueryable: chuyển đổi các bộ sưu tập để loại IQueryable<T> ToArray: chuyển đổi các bộ sưu tập vào một mảng. ToList: chuyển đổi các bộ sưu tập để loại IList<T> ToDictionary: chuyển đổi các bộ sưu tập để IDictionary<K, T> loại IDictionary<K, T> lập chỉ mục bằng phím K. ToLookup: chuyển đổi các bộ sưu tập để ILookup<K, T> loại ILookup<K, T> lập chỉ mục bằng phím K. Cast: chuyển đổi một tổ chức phi chung IEnumerable bộ sưu tập vào một trong các IEnumerable<T> bởi mỗi yếu tố để T loại. Ném một ngoại lệ cho các kiểu không tương thích. OfType: chuyển đổi một tổ chức phi chung IEnumerable bộ sưu tập vào một trong các IEnumerable<T> Chỉ có yếu tố của loại T được bao gồm. Các toán tử tìm kiếm sẽ được xác định trong giao diện IEnumerable<T> như phương pháp khuyến khích chung chung, và triển khai thực hiện cụ thể được cung cấp trong lớp Sequence Kết quả là, lớp học nào mà thực hiện các giao diện IEnumerable<T> có quyền truy cập đến những phương pháp này và là queryable. LINQ cũng định nghĩa một tập các chung Func đại biểu, trong đó xác định các loại đại biểu xử lý bằng các phương pháp truy vấn LINQ. Bất kỳ chức năng bọc trong một đoàn Func có thể được sử dụng bởi LINQ. Mỗi phương thức trả về một đối tượng thực hiện các giao diện IEnumerable<T> do đó, đầu ra của một người có thể được sử dụng như các đầu vào khác, kết quả composability truy vấn. Chức năng, tuy nhiên, có lazily đánh giá, nghĩa là, các bộ sưu tập được liệt kê chỉ khi kết quả được lấy. Đếm được tạm dừng ngay sau khi trận đấu được tìm thấy, và các đại biểu đánh giá trên nó. Khi một đối tượng tiếp theo trong bộ sưu tập kết quả được lấy ra, việc liệt kê các nguồn thu được tiếp tục vượt ra ngoài yếu tố đã được đánh giá. Tuy nhiên, hoạt động nhóm, như GroupBy và OrderBy, cũng như Sum, Min, Max, trung bình và tổng hợp, yêu cầu dữ liệu từ tất cả các yếu tố trong bộ sưu tập, và một lực lượng đánh giá mong muốn. LINQ không một tính năng tôi ưu hoa truy vấn và các nhà điều hành tìm kiếm sẽ được đánh giá theo thứ tự chúng được viện dẫn. Các phương pháp LINQ được compilable trong NET Framework 2.0., Phần mở rộng Ngôn ngữ Trong khi LINQ chủ yếu thực hiện như một thư viện cho. NET Framework 3.5, nó cũng định nghĩa một tập các phần mở rộng ngôn ngữ có thể được thực hiện bởi tùy chọn ngôn ngữ để thực hiện truy vấn một ngôn ngữ lớp đầu tiên xây dựng và cung cấp đường cú pháp để viết các truy vấn. Những phần mở rộng ngôn ngữ đã bước đầu được thực hiện trong C # 3.0, VB 9,0 và Oxygene, với các ngôn ngữ khác như F # và Nemerle có hỗ trợ công bố sơ bộ. Các phần mở rộng ngôn ngữ bao gồm: [2] Truy vấn cú pháp: Một là ngôn ngữ Việt để chọn một cú pháp truy vấn rằng nó sẽ nhận ra nguyên bản. Những từ khóa ngôn ngữ phải được dịch bởi trình biên dịch cho các cuộc gọi phương pháp thích hợp LINQ. Các ngôn ngữ có thể thực hiện sắp xếp lại nhà điều hành và tối ưu hóa khác ở mức từ khóa. Ngầm đánh máy biến: nâng cao này cho phép các biến được khai báo mà không có chỉ định các loại của họ. Các ngôn ngữ C # 3.0 và Oxygene tuyên bố chúng với những từ khóa var Trong VB9.0, việc sử dụng các từ khóa Dim mà không loại tờ khai hoàn thành việc kê khai như vậy. Các đối tượng này vẫn còn mạnh mẽ; cho các đối tượng sử dụng các trình biên dịch suy luận kiểu suy ra loại của các biến. Điều này cho phép kết quả của các truy vấn được chỉ định và kết quả của họ được xác định mà không khai báo kiểu của các biến trung gian. Chưa xác định người loại: loại Chưa xác định người cho phép các lớp học, có chứa dữ liệu khai báo thành viên duy nhất, để được suy ra bởi trình biên dịch. Điều này là hữu ích cho việc chọn và tham gia vận hành, các loại quả có thể khác biệt với các loại của các đối tượng ban đầu. Trình biên dịch này sử dụng kiểu suy luận để xác định các lĩnh vực chứa trong các lớp học và tạo ra accessors và mutators cho các lĩnh vực này.
  • 6. Đối tượng Initializer: initializers Object cho phép một đối tượng được tạo ra và khởi tạo trong một phạm vi duy nhất, điều này cho phép tạo ra các đại biểu rằng các lĩnh vực chiết xuất từ một đối tượng, tạo một đối tượng mới và gán dữ liệu để trích xuất các lĩnh vực của đối tượng mới trong một tuyên bố đơn , như là cần thiết để chọn và tham gia vận hành. Biểu thức Lambda: Lambda biểu thức được sử dụng để tạo ra các đại biểu nội tuyến với các mã khác. Điều này cho phép các predicates và chức năng khai thác được ghi nội tuyến với các truy vấn. Ví dụ, trong truy vấn để chọn tất cả các đối tượng trong bộ sưu tập một với SomeProperty ít hơn 10, int someValue = 5; var results = from c in someCollection let x = someValue * 2 where c.SomeProperty < x select new {c.SomeProperty, c.OtherProperty}; foreach (var result in results) { Console.WriteLine(result); } các loại biến kết quả, c và tất cả các kết quả được suy ra bởi trình biên dịch - giả sử SomeCollection là IEnumerable<SomeClass> c sẽ được SomeClass kết quả sẽ được IEnumerable<SomeOtherClass> và kết quả sẽ được SomeOtherClass nơi SomeOtherClass sẽ là một trình biên dịch tạo ra lớp với SomeProperty chỉ và tài sản OtherProperty và giá trị của họ thiết lập từ các điều khoản tương ứng của các đối tượng nguồn. Các Toán tử sau đó được dịch ra các cuộc gọi phương thức như: IEnumerable<SomeOtherClass> results = SomeCollection.Where ( c => c.SomeProperty < (SomeValue * 2) ) .Select ( c => new {c.SomeProperty, c.OtherProperty} ) foreach (SomeOtherClass result in results)
  • 7. { Console.WriteLine(result.ToString()); } LINQ cung cấp: - LINQ to Objects - LINQ to XML - LINQ to SQL - LINQ to DataSets - Other providers -LINQ to Objects: Các nhà cung cấp được sử dụng để truy vấn trong bộ sưu tập bộ nhớ, sử dụng công cụ truy vấn thực hiện tại địa phương của LINQ. Các mã được tạo ra bởi nhà cung cấp này đề cập đến việc thực hiện các nhà khai thác truy vấn tiêu chuẩn như được định nghĩa trong các lớp học Sequence và cho phép các bộ sưu tập Enumerable<T> được truy vấn tại địa phương. Hiện hành thực hiện các LINQ to Đối tượng sử dụng ví dụ như O (n) tuyến tính và tìm tra cứu đơn giản, và không phải là tối ưu hóa cho các truy vấn phức tạp - LINQ to XML: Các LINQ to XML cung cấp dịch vụ chuyển đổi một tài liệu XML với một bộ sưu tập của XElement đối tượng, mà sau đó truy vấn đối với việc sử dụng động cơ thực hiện tại địa phương được cung cấp như một phần của việc thực hiện các nhà điều hành truy vấn tiêu chuẩn [5.] - LINQ to SQL: Các LINQ to SQL cho phép các nhà cung cấp LINQ sẽ được sử dụng để truy vấn SQL Server cũng như cơ sở dữ liệu SQL Server Compact cơ sở dữ liệu. Kể từ khi dữ liệu SQL Server nằm trên máy chủ từ xa, và bởi vì nó đã bao gồm một công cụ truy vấn, LINQ to SQL không sử dụng động cơ của LINQ truy vấn. Thay vào đó, nó chuyển đổi một truy vấn LINQ cho một truy vấn SQL là sau đó gửi đến SQL Server cho chế biến Tuy nhiên, kể từ SQL Server lưu trữ các dữ liệu như dữ liệu quan hệ và làm việc với LINQ dữ liệu đóng gói trong các đối tượng., Hai đại diện phải được ánh xạ với nhau. Vì lý do này, LINQ to SQL cũng định nghĩa khuôn khổ lập bản đồ. Lập bản đồ này được thực hiện bằng cách xác định các lớp học tương ứng với các bảng trong cơ sở dữ liệu, và có chứa tất cả hoặc một tập hợp con của các cột trong bảng dữ liệu như là các thành viên Thư này, cùng với mô hình quan hệ khác chẳng hạn như các thuộc tính khóa chính được quy định sử dụng LINQ to SQL-thuộc tính được xác định. Ví dụ [Table(Name="Customers")] public class Customer { [Column(IsPrimaryKey = true)] public int CustID; [Column] public string CustName; } Hoàng Trung Kiên_THB(^_^)