Trong bài trước “LINQ – Sử dụng Inner Join” tôi đã giới thiệu cơ bản về Inner Join trong LINQ, tuy nhiên ví dụ trong bài chỉ thực hiện join hai bảng với một mệnh đề join. Bài viết này sẽ tiếp tục về chủ đề Inner Join với ví dụ từ ba bảng Orders, OrderDetails và Products trong Northwind database.
Cú pháp chung để thực hiện kết trong LINQ với nhiều mệnh đề join là viết các mệnh đề join liên tiếp nhau: from clause Bảng OrderDetails được tạo ra do mối quan hệ giữa Products và Orders là Many-to-Many. Mô hình quan hệ của 3 bảng trong ví dụ này được minh họa như sau: Các class tương ứng với 3 bảng trên trong C#: class Product { public int ProductID; public string ProductName; } class Order { public int OrderID; public DateTime OrderDate; } class OrderDetail { public int OrderID; public int ProductID; public int Quantity; } Trong ví dụ này thay vì gán giá trị các thuộc tính của đối tượng thông qua constructor, tôi sẽ gán thông qua tính năng object initializers trong C# 3. Điều này giúp bạn dễ nhận ra ý nghĩa của các tham số truyền vào đối tượng. Tạo dữ liệu: var products=new Product[]{ new Product() { ProductID=1, ProductName="Windows Seven" }, new Product() { ProductID=2, ProductName="Macintosh OS" }, new Product() { ProductID=3, ProductName="Android" }, new Product() { ProductID=4, ProductName="Chromium OS" } }; var orders=new Order[]{ new Order() { OrderID=100, OrderDate=new DateTime(2011,1,1)}, new Order() { OrderID=101, OrderDate=new DateTime(2011,1,2)}, new Order() { OrderID=102, OrderDate=new DateTime(2011,1,3)}, new Order() { OrderID=103, OrderDate=new DateTime(2011,1,4)} }; var orderDetails = new OrderDetail[]{ new OrderDetail() { OrderID=100, ProductID=1, Quantity=10 }, new OrderDetail() { OrderID=101, ProductID=2, Quantity=20 }, new OrderDetail() { OrderID=102, ProductID=3, Quantity=30 }, new OrderDetail() { OrderID=102, ProductID=4, Quantity=40 }, }; Cuối cùng ta thực hiện truy vấn để lấy ra các dòng trong OrderDetails với các thông tin thêm vào là ProductName và OrderDate. Phiên bản sử dụng hai mệnh đề join: var orderDetailRecords=from p in products join od in orderDetails on p.ProductID equals od.ProductID join o in orders on od.OrderID equals o.OrderID select new { ProductName=p.ProductName, OrderDate=o.OrderDate.ToShortDateString(), Quantity=od.Quantity }; Phiên bản sử dụng ba mệnh đề from: var orderDetailRecords=from p in products from od in orderDetails from o in orders where p.ProductID==od.ProductID && od.OrderID==o.OrderID select new { ProductName=p.ProductName, OrderDate=o.OrderDate.ToShortDateString(), Quantity=od.Quantity }; Kết quả (LINQPad):
Ghi chú: Trong mệnh đề select của hai câu LINQ trên, tôi sử dụng OrderDate.ToShortDateString() chỉ có mục đích hiển thị kết quả gọn hơn. Bạn không nên dùng khi làm các ví dụ khác vì dữ liệu trả về sẽ có kiểu không phù hợp.Như bạn thấy hai dòng cuối cùng là sản phẩm Adroid và Chromium OS có cùng giá trị OrderDate. Điều này có nghĩa là chúng nằm trong cùng một hóa đơn (có mã là 102). Related articles |
LINQ – Ví dụ về Multiple Inner Join (C#)
Ý kiến bạn đọc
Tin tức khác
LINQ – Group Join và Outer Join (Left Join, Right Join)
- 19/3/2012
LINQ – Sử dụng Group By
- 19/3/2012
LINQ – Sử dụng Inner Join (C#)
- 19/3/2012
LINQPad – Hướng dẫn tạo class và chạy C# Program
- 19/3/2012
Hướng dẫn cơ bản sử dụng LINQPad
- 19/3/2012
LINQ to SQL – Entity Class: Mapping Database, Table và Relationship
- 19/3/2012
LINQ to SQL – Các khái niệm cơ bản: Object-Relational Mapping, Entity Class, Association và DataContext
- 19/3/2012
LINQ – Từ Lambda Expression đến LINQ
- 19/3/2012
DLR– Dynamic Programming: Một wrapper của string với DynamicObject và reflection
- 16/3/2012
LINQ cơ bản– Tổng quan về kiến trúc LINQ to XML
- 14/3/2012
Tin tiêu điểm
-
LINQ – Sử dụng Inner Join (C#) (44,459)
-
LINQ-Phần 1: Truy vấn dữ liệu. (33,625)
-
LINQ to SQL – Các khái niệm cơ bản: Object-Relational Mapping, Entity Class, Association và DataContext (10,912)
-
LINQ – Ví dụ về Multiple Inner Join (C#) (9,779)
-
LINQPad – Hướng dẫn tạo class và chạy C# Program (9,715)
-
LINQ-Phần 3: Thực thi dữ liệu với Transaction (9,183)
-
Hướng dẫn cơ bản sử dụng LINQPad (8,950)
-
LINQ – Group Join và Outer Join (Left Join, Right Join) (8,789)
-
LINQ-Phần 2: Thưc thi dữ liệu. (7,288)
-
LINQ-Phần 4: Linq nâng cao (7,048)
Gallery
Text Links
Thiết kế logo chuyên nghiệp Insky
DAFABET
W88 w88b.com/dang-ky-tai-khoan-w88
W88
ca do bong da online
DAFABET
W88 w88b.com/dang-ky-tai-khoan-w88
W88
ca do bong da online
Tags
asp.net
JavaScript
Lập trình
Cơ sở dữ liệu
jquery
Csharp
Ajax
Thủ thuật
JavaScript
menu
Sql Server
Lập trình C#
WebService
stty
Sql
Phân trang
Rewrite
Mã hoá
Backup
Thủ thuật lập trình
Store procedure
Accordion
Validation
Store
Upload
Slide
jQueryPlugin
StoreProcedure
Regular Expression
Regex
android
Quick and snow
HTML5
WPF
WCF
Copyright © 2011 - 2012 vietshare.vn
by
phamkhuong102@gmail.com doanhkisi2315@gmail.com. All rights reserved.