SQLと同じJOIN句。
成果物
情報源
コード
using System; using System.Collections.Generic; using System.Linq; class Person { public string Name { get; set; } } class Pet { public string Name { get; set; } public Person Owner { get; set; } } class Main { private List<Person> persons; private List<Pet> pets; public void Run() { persons = CreatePersons(); pets = CreatePets(); Show(Query()); } private List<Person> CreatePersons() { return new List<Person>() { new Person { Name="A" }, new Person { Name="B" }, }; } private List<Pet> CreatePets() { return new List<Pet>() { new Pet { Name="a", Owner=persons[0] }, new Pet { Name="b", Owner=persons[0] }, new Pet { Name="c", Owner=persons[1] }, }; } private IEnumerable<dynamic> Query() { return from person in persons join pet in pets on person equals pet.Owner select new { OwnerName=person.Name, PetName=pet.Name}; } private void Show(in IEnumerable<dynamic> query) { foreach (var item in query) { Console.WriteLine($"OwnerName={item.OwnerName}, PetName={item.PetName}"); } } }
OwnerName=A, PetName=a OwnerName=A, PetName=b OwnerName=B, PetName=c
所感
ポイントはjoin
。
from person in persons join pet in pets on person equals pet.Owner select new { OwnerName=person.Name, PetName=pet.Name };
SQLで書くと以下。
SELECT person.Name, pet.Name FROM Persons person INNER JOIN Pets pet ON person.id = pet.owner_id;
LINQはid
列が不要。そのままインスタンスで指定できるので読みやすい。
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13 ※
- bash 4.4.12(1)-release ※
- SQLite 3.29.0 ※
- C# dotnet 3.0.100 ※
$ uname -a Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux