LINQ Join Operators (조인연산자)
2022. 2. 10. 00:00ㆍCSharp/Advance
반응형
SQL 조인 연산자와 유사한 기능을 수행
교차조인 (Cross Join)
// product 의 category 와 categories 의 category 를 조인 연산
string[] categories = {
"Beverages",
"Condiments",
"Vegetables",
"Dairy Products",
"Seafood"
};
List<Product> products = GetProductList();
var q = from c in categories
join p in products on c equals p.Category
select (Category: c, p.ProductName);
foreach (var v in q)
{
Console.WriteLine(v.ProductName + ": " + v.Category);
}
// output
Chai: Beverages
Chang: Beverages
Guarana Fantastica: Beverages
...
Aniseed Syrup: Condiments
Chef Anton's Cajun Seasoning: Condiments
Chef Anton's Gumbo Mix: Condiments
...
Queso Cabrales: Dairy Products
Queso Manchego La Pastora: Dairy Products
Gorgonzola Telino: Dairy Products
...
Spegesild: Seafood
Escargots de Bourgogne: Seafood
Rod Kaviar: Seafood
그룹조인 (Group join)
string[] categories = {
"Beverages",
"Condiments",
"Vegetables",
"Dairy Products",
"Seafood"
};
List<Product> products = GetProductList();
var q = from c in categories
join p in products on c equals p.Category into ps
select (Category: c, Products: ps);
foreach (var v in q)
{
Console.WriteLine(v.Category + ":");
foreach (var p in v.Products)
{
Console.WriteLine(" " + p.ProductName);
}
}
// output
Beverages:
Chai
Chang
...
Lakkalikoori
Condiments:
Aniseed Syrup
Chef Anton's Cajun Seasoning
...
Original Frankfurter grune Soße
Vegetables:
Dairy Products:
Queso Cabrales
Queso Manchego La Pastora
...
Mozzarella di Giovanni
Seafood:
Ikura
Konbu
...
Rod Kaviar
Left outer join
// vegetables 같은 경우는 matching 되는 값이 없지만
// 해당값을 null 로 하여 join 하게 된다.
// output 에 확인해 보면 아래와 같이 표시된다.
// (No products): Vegetables
string[] categories = {
"Beverages",
"Condiments",
"Vegetables",
"Dairy Products",
"Seafood"
};
List<Product> products = GetProductList();
var q = from c in categories
join p in products on c equals p.Category into ps
from p in ps.DefaultIfEmpty()
select (Category: c, ProductName: p == null ? "(No products)" : p.ProductName);
foreach (var v in q)
{
Console.WriteLine($"{v.ProductName}: {v.Category}");
}
// output
Chai: Beverages
Chang: Beverages
Guarana Fantastica: Beverages
Sasquatch Ale: Beverages
Steeleye Stout: Beverages
Cote de Blaye: Beverages
Chartreuse verte: Beverages
Ipoh Coffee: Beverages
Laughing Lumberjack Lager: Beverages
Outback Lager: Beverages
Rhonbrau Klosterbier: Beverages
Lakkalikoori: Beverages
Aniseed Syrup: Condiments
Chef Anton's Cajun Seasoning: Condiments
Chef Anton's Gumbo Mix: Condiments
Grandma's Boysenberry Spread: Condiments
Northwoods Cranberry Sauce: Condiments
Genen Shouyu: Condiments
Gula Malacca: Condiments
Sirop d'erable: Condiments
Vegie-spread: Condiments
Louisiana Fiery Hot Pepper Sauce: Condiments
Louisiana Hot Spiced Okra: Condiments
Original Frankfurter grune Soße: Condiments
(No products): Vegetables
Queso Cabrales: Dairy Products
Queso Manchego La Pastora: Dairy Products
Gorgonzola Telino: Dairy Products
Mascarpone Fabioli: Dairy Products
Geitost: Dairy Products
Raclette Courdavault: Dairy Products
Camembert Pierrot: Dairy Products
Gudbrandsdalsost: Dairy Products
Flotemysost: Dairy Products
Mozzarella di Giovanni: Dairy Products
Ikura: Seafood
Konbu: Seafood
Carnarvon Tigers: Seafood
Nord-Ost Matjeshering: Seafood
Inlagd Sill: Seafood
Gravad lax: Seafood
Boston Crab Meat: Seafood
Jack's New England Clam Chowder: Seafood
Rogede sild: Seafood
Spegesild: Seafood
Escargots de Bourgogne: Seafood
Rod Kaviar: Seafood
관련영상
반응형
'CSharp > Advance' 카테고리의 다른 글
Parallel Programming (Thread) (0) | 2022.02.14 |
---|---|
범위와 인덱스 그리고 슬라이싱 (Range, Index and Slicing) (0) | 2022.02.11 |
LINQ Aggregator Operators (집계연산자) (0) | 2022.02.09 |
Linq 집합 연산자 (Set Operators) (0) | 2022.02.08 |
LINQ Grouping Operators (GroupBy , into) (0) | 2022.02.07 |