LINQ結合クエリー
14223 ワード
public class Category
{
public int IdCategory { get; set; }
public string Name { get; set; }
}
public class Product
{
public string IdProduct { get; set; }
public int IdCategory { get; set; }
public string Description { get; set; }
}
class Program
{
List<Category> categories = new List<Category>(){
new Category{ IdCategory=1, Name="Pasta"},
new Category{ IdCategory=2, Name="Beverages"},
new Category{ IdCategory=3, Name="Other Food"}
};
List<Product> products = new List<Product>(){
new Product{ IdCategory=1, IdProduct="PASTA01", Description="Tortellini"},
new Product{ IdCategory=1, IdProduct="PASTA02", Description="Spaghtti"},
new Product{ IdCategory=1, IdProduct="PASTA03", Description="Fusilli"},
new Product{ IdCategory=2, IdProduct="BEV01", Description="Water"},
new Product{ IdCategory=2, IdProduct="BEV02", Description="Orange Juice"}
};
static void Main(string[] args)
{
Program p = new Program();
p.InnerJoin();
p.GroupJoin();
p.LeftJoin();
}
public void InnerJoin()
{
Console.WriteLine("------InnerJoin Test-----");
//
var categoriesAndProducts =
categories.Join(products,
c => c.IdCategory,
p => p.IdCategory,
(c, p) => new { c.IdCategory, CategoryName = c.Name, ProductDescription = p.Description }
);
//
//var categoriesAndProducts =
// from c in categories
// join p in products on c.IdCategory equals p.IdCategory
// select new { c.IdCategory, CategoryName = c.Name, ProductDescription = p.Description };
// IdCategory=3 , Other Food Category
foreach (var item in categoriesAndProducts)
{
Console.WriteLine(item);
}
}
// SQL
public void GroupJoin()
{
Console.WriteLine("------GroupJoin Test-----");
//
var categoriesAndProducts =
categories
.GroupJoin(products,
c => c.IdCategory,
p => p.IdCategory,
(c, p) => new { c.IdCategory, CategoryName = c.Name, Products = p }
);
//
//var categoriesAndProducts =
// from c in categories
// join p in products on c.IdCategory equals p.IdCategory
// into productByCategory
// select new { c.IdCategory, CategoryName = c.Name, Products = productByCategory };
foreach (var category in categoriesAndProducts)
{
Console.WriteLine("{0} - {1}", category.IdCategory, category.CategoryName);
foreach (var product in category.Products)
Console.WriteLine("\t{0}", product.Description);
}
}
// , ,
public void LeftJoin()
{
Console.WriteLine("------LeftJoin Test-----");
//
var categoriesAndProducts =
categories
.GroupJoin(products,
c => c.IdCategory,
p => p.IdCategory,
(c, p) => new { c.IdCategory, CategoryName = c.Name, Products = p }
);
foreach (var g in categoriesAndProducts)
{
var temp = g.Products
.DefaultIfEmpty(new Product { IdCategory = 0, Description = string.Empty, IdProduct = string.Empty })
.Select(p => new { g.IdCategory, g.CategoryName, p.Description });
foreach (var item in temp)
{
Console.WriteLine(item);
}
}
//
//var categoriesAndProducts =
// from c in categories
// join p in products on c.IdCategory equals p.IdCategory
// into productByCategory
// from pc in productByCategory.DefaultIfEmpty(
// new Product { IdCategory = 0, Description = string.Empty, IdProduct = string.Empty })
// select new { c.IdCategory, CategoryName = c.Name, ProductDescription = pc.Description };
//// IdCategory=3 ,
//foreach (var item in categoriesAndProducts)
//{
// Console.WriteLine(item);
//}
}
}