LINQ – Ví Dụ Về Multiple Inner Join (C#) | YinYang's Programing Blog
Có thể bạn quan tâm
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 join clause join clause … select 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):
| IEnumerable<> (4 items) | ||
| ProductName | OrderDate | Quantity |
| Windows Seven | 1/1/2011 | 10 |
| Macintosh OS | 1/2/2011 | 20 |
| Android | 1/3/2011 | 30 |
| Chromium OS | 1/3/2011 | 40 |
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 – Sử dụng Inner Join (C#)
yinyangit.wordpress.com
Đánh giá:
Chia sẻ:
- In
- X
Có liên quan
Từ khóa » Join Nhiều Bảng Trong Linq
-
Kết Nối Nhiều Bảng Bằng Join Trong LINQ | DAMMIO
-
Toán Tử Join Trong LINQ | Comdy
-
Truy Vấn Nhiều Bảng Trong LinQ - Programming - Dạy Nhau Học
-
Cách Thực Hiện Tham Gia Giữa Nhiều Bảng Trong LINQ Lambda?
-
Nhóm Nhiều Bảng Trong LINQ - HelpEx
-
ASP.NET MVC - #41: Truy Vấn Nhiều Bảng Trong Sử Dụng LinQ | TEDU
-
LINQ – Sử Dụng Inner Join (C#) | YinYang's Programing Blog
-
Linq Trong Lập Trình C# .NET - Thực Hình Ví Dụ Linq
-
Join Theo Nhiều điều Kiện Trong LinQ - Non Nguyen Blog
-
Perform Left Outer Joins (LINQ In C#) | Microsoft Docs
-
Tối ưu Hóa Câu Lệnh SQL - Viblo
-
Linq. Chọn Từ Nhiều Bảng - C#
-
ASP.NET MVC 5 LinQ To SQL - HOANGUYENIT