LINQで外部結合のやり方を調べるために試行錯誤しましたが、分かりませんでした。
以下の例は、TraderテーブルとItemsテーブルのID列で結合して、Id列の値1~6を出力するようにしたいです。
何か良い方法はありませんでしょうか。
また、インターネットで調べた際に、外部結合の例でGroupJoinとSelectManyが使われておりましたが、外部結合はできないのでしょうか。
環境は、.NetCore 3.1 でVisual Studioを使用しております。
※本当はコントローラに書くのは良くないということは分かっていますが、動作確認が容易だと判断してあえてここに記載しています。
LINQ
1using Microsoft.AspNetCore.Mvc; 2using QuickMaster.Models; 3using QuickMaster.Views; 4using System; 5using System.Collections.Generic; 6using System.Linq; 7using System.Web; 8using WebApplication1.Models; 9using System.IO; 10 11namespace WebApplication1.Controllers 12{ 13 public class HomeController : Controller 14 { 15 private readonly MyContext _context; 16 17 public HomeController(MyContext context) 18 { 19 this._context = context; 20 } 21 22 public ActionResult Index() 23 { 24 25 Trader[] traders = new Trader[] { 26 new Trader() { Id = 1, CompanyNm = "株式会社ABC", Address = "北海道" }, 27 new Trader() { Id = 2, CompanyNm = "株式会社DEF", Address = "青森" }, 28 new Trader() { Id = 3, CompanyNm = "株式会社GHI", Address = "秋田" }, 29 new Trader() { Id = 4, CompanyNm = "株式会社HIJ", Address = "岩手" }, 30 new Trader() { Id = 5, CompanyNm = "株式会社KLM", Address = "山形" }, 31 new Trader() { Id = 6, CompanyNm = "株式会社OPQ", Address = "宮城" }, 32 }; 33 34 ItemList[] items = new ItemList[] { 35 new ItemList() { Id = 1, Price = 100, ExpiryDate = new DateTime(2000, 4, 1) }, 36 new ItemList() { Id = 2, Price = 200, ExpiryDate = new DateTime(2005, 5, 1) }, 37 new ItemList() { Id = 3, Price = 300, ExpiryDate = new DateTime(2010, 6, 1) }, 38 new ItemList() { Id = 4, Price = 400, ExpiryDate = new DateTime(2015, 7, 1) }, 39 new ItemList() { Id = 5, Price = 2020, ExpiryDate = new DateTime(2020, 8, 1) } 40 }; 41 42 43 var result = traders.GroupJoin( 44 items, 45 trader => trader.Id, 46 item => item.Id, 47 (trader, item) => new { trader, item }) 48 .SelectMany(o => o.item, (j, k) => new 49 { 50 Id = j.trader.Id, 51 CompanyNm = j.trader.CompanyNm, 52 Address = j.trader.Address, 53 Price = k.Price, 54 ExpireDate = k.ExpiryDate 55 }); 56 57 foreach (var o in result) 58 { 59 Console.WriteLine($"Id={o.Id}, CompanyNm={o.CompanyNm}, Address={o.Address}, Price={o.Price}, ExpireDate={o.ExpireDate}"); 60 } 61 return View(); 62 } 63 } 64}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/24 14:52