注æ
ãã®ãã¼ã¸ã«ã¢ã¯ã»ã¹ããã«ã¯ãæ¿èªãå¿ è¦ã§ãã ãµã¤ã³ã¤ã³ã¾ãã¯ãã£ã¬ã¯ããªã®å¤æ´ã試ããã¨ãã§ãã¾ãã
ãã®ãã¼ã¸ã«ã¢ã¯ã»ã¹ããã«ã¯ãæ¿èªãå¿ è¦ã§ãã ãã£ã¬ã¯ããªã®å¤æ´ã試ããã¨ãã§ãã¾ãã
ãã®è¨äºã§ã¯ãC# ã§ã®ã¯ã¨ãªå¼ã«é¢é£ããåºæ¬æ¦å¿µã«ã¤ãã¦èª¬æãã¾ãã
ã¯ã¨ãªã¨ã¯ä½ããã¾ãã©ã®ãããªåããããã®ã
ã¯ã¨ãªã¨ã¯ãæå®ãããã¼ã¿ ã½ã¼ã¹ (åä¸ã¾ãã¯è¤æ°) ããã©ã®ãããªãã¼ã¿ãåå¾ãããããã®ãã¼ã¿ãã©ã®ãããªå½¢å¼ã¨ç·¨æã§è¿ããã説æãããå½ä»¤ã®ã»ããã§ãã ã¯ã¨ãªã¯ããããçæããçµæã¨ã¯åºå¥ããã¾ãã
ä¸è¬ã«ãã½ã¼ã¹ ãã¼ã¿ã¯ãåã種é¡ã®è¦ç´ ã®ã·ã¼ã±ã³ã¹ã¨ãã¦è«ççã«ç·¨æããã¾ãã ãã¨ãã°ãSQL ãã¼ã¿ãã¼ã¹ ãã¼ãã«ã«ã¯ãè¡ã®ã·ã¼ã±ã³ã¹ãå«ã¾ãã¦ãã¾ãã XML ãã¡ã¤ã«ã«ã¯ãXML è¦ç´ ã® "ã·ã¼ã±ã³ã¹" ãããã¾ã (ãã ããXML è¦ç´ ã¯ããªã¼æ§é ã§é層åããã¦ãã¾ã)ã ã¡ã¢ãªå ã³ã¬ã¯ã·ã§ã³ã«ã¯ããªãã¸ã§ã¯ãã®ã·ã¼ã±ã³ã¹ãå«ã¾ãã¦ãã¾ãã
ã¢ããªã±ã¼ã·ã§ã³ã®è¦³ç¹ããè¨ãã¨ãå
ã®ã½ã¼ã¹ ãã¼ã¿ã®ç¹å®ã®åãæ§é ä½ã¯éè¦ã§ã¯ããã¾ããã ã¢ããªã±ã¼ã·ã§ã³ã¯å¸¸ã«ãã½ã¼ã¹ ãã¼ã¿ã IEnumerable<T> ã¾ã㯠IQueryable<T> ã³ã¬ã¯ã·ã§ã³ã¨ãã¦èªèãã¾ãã ãã¨ãã°ãLINQ to XML ã§ã¯ãã½ã¼ã¹ ãã¼ã¿ã¯ IEnumerable
<XElement> ã¨ãã¦è¡¨ç¤ºããã¾ãã
ã¯ã¨ãªã¯ãã®ã½ã¼ã¹ ã·ã¼ã±ã³ã¹ã«å¯¾ãã¦ã次㮠3 ã¤ã®ãã¡ã®ãããããå®è¡ãããã¨ãèãããã¾ãã
åã ã®è¦ç´ ã夿´ãããã¨ãªããè¦ç´ ã®ãµãã»ãããåå¾ãã¦æ°ããã·ã¼ã±ã³ã¹ãçæããã ããã¨ã¯ã¨ãªã§ã¯ãè¿ãããã·ã¼ã±ã³ã¹ããã¾ãã¾ãªæ¹æ³ã§ä¸¦ã¹æ¿ãããã°ã«ã¼ãåãããã¨ãã§ãã¾ã (ä¸ã®ä¾ã§ã¯
scores
ãint[]
ã§ããã¨æ³å®ãã¦ãã¾ã)ãIEnumerable<int> highScoresQuery = from score in scores where score > 80 orderby score descending select score;
ä¸è¨ã®ä¾ã®ããã«è¦ç´ ã®ã·ã¼ã±ã³ã¹ãåå¾ããããããããæ°ããåã®ãªãã¸ã§ã¯ãã«å¤æããã ãã¨ãã°ãã¯ã¨ãªã§ãã¼ã¿ ã½ã¼ã¹å ã®ç¹å®ã®é¡§å®¢ã¬ã³ã¼ãããå§ã®ã¿ãåå¾ãããã¨ãã§ãã¾ãã ã¾ãã¯ãå®å ¨ãªã¬ã³ã¼ããåå¾ããããã使ç¨ãã¦å¥ã®ã¡ã¢ãªå ãªãã¸ã§ã¯ãåã¾ã㯠XML ãã¼ã¿ãæ§ç¯ãã¦ãããæçµçãªçµæã·ã¼ã±ã³ã¹ãçæãããã¨ãã§ãã¾ãã æ¬¡ã®ä¾ã§ã¯ã
int
ããstring
ã¸ã®ããã¸ã§ã¯ã·ã§ã³ãè¡ã£ã¦ãã¾ããhighScoresQuery
ã®æ°ããåããããã¨ã«æ³¨ç®ãã¦ãã ãããIEnumerable<string> highScoresQuery2 = from score in scores where score > 80 orderby score descending select $"The score is {score}";
ã½ã¼ã¹ ãã¼ã¿ã«é¢ããã·ã³ã°ã«ãã³å¤ãåå¾ãã¾ããæ¬¡ã«ä¾ã示ãã¾ãã
ç¹å®ã®æ¡ä»¶ã«ä¸è´ããè¦ç´ ã®æ°ã
æå¤§å¤ã¾ãã¯æå°å¤ãæã¤è¦ç´ ã
æ¡ä»¶ã«ä¸è´ããæåã®è¦ç´ ããæå®ãããè¦ç´ ã»ããå ã®ç¹å®ã®å¤ã®åè¨ã ãã¨ãã°ã次ã®ã¯ã¨ãªã¯ãæ´æ°é å
scores
ããã80 ãã大ããã¹ã³ã¢ã®æ°ãè¿ãã¾ããvar highScoreCount = ( from score in scores where score > 80 select score ).Count();
ä¸è¨ã®ä¾ã§ã¯ãEnumerable.Count ã¡ã½ããã«å¯¾ããå¼ã³åºãã®åã«ãã¯ã¨ãªå¼ãå²ããã£ãã使ç¨ããã¦ãã¾ãã æ°ãã夿°ã使ç¨ãã¦å ·ä½çãªçµæãä¿åãããã¨ãã§ãã¾ãã
IEnumerable<int> highScoresQuery3 = from score in scores where score > 80 select score; var scoreCount = highScoresQuery3.Count();
ä¸è¨ã®ä¾ã§ã¯ãCount
ã«å¯¾ããå¼ã³åºãã®åã§ã¯ã¨ãªãå®è¡ããã¦ãã¾ããããã¯ãCount
ã«ãã£ã¦è¿ãããè¦ç´ ã®æ°ã確èªããããã«ãhighScoresQuery
ãçµæãå復å¦çããå¿
è¦ãããããã§ãã
ã¯ã¨ãªå¼ã¨ã¯ä½ã
ã¯ã¨ãªå¼ã¨ã¯ãã¯ã¨ãªæ§æã§è¡¨ãããã¯ã¨ãªã®ãã¨ã§ãã ã¯ã¨ãªå¼ã¯ããã¡ã¼ã¹ãã¯ã©ã¹ã®è¨èªã³ã³ã¹ãã©ã¯ãã§ãã ä»ã®å¼ã¨åæ§ã«ãC# å¼ãæå¹ãªä»»æã®ã³ã³ããã¹ãã§ä½¿ç¨ã§ãã¾ãã ã¯ã¨ãªå¼ã®æ§æã¯ãSQL ã XQuery ãªã©ã®ãããªå®£è¨åã®æ§æã§è¨è¿°ããããä¸é£ã®å¥ã§æ§æããã¾ãã åå¥ã«ã¯ã1 ã¤ä»¥ä¸ã® C# å¼ãå«ã¾ãããããã®å¼èªä½ãã¯ã¨ãªå¼ã§ããããã¯ã¨ãªå¼ãå«ãã§ããå ´åãããã¾ãã
ã¯ã¨ãªå¼ã¯ã å¥ã® from
å¥ã¨æå¾ã® select
ã¾ã㯠group
å¥ã®éã«ã¯ã次ã®çç¥å¯è½å¥ã 1 ã¤ä»¥ä¸å«ãããã¨ãã§ãã¾ã: whereãorderbyãjoinãletãããã³å¥ã® from å¥ã
into
ãã¼ã¯ã¼ãã使ç¨ãã¦ãjoin
å¥ã¾ã㯠group
å¥ã®çµæãæå¹ã«ãã¦ãåãã¯ã¨ãªå¼å
ã®ããå¤ãã®ã¯ã¨ãªå¥ã®ã½ã¼ã¹ã¨ãã¦æ©è½ãããã¨ãã§ãã¾ãã
ã¯ã¨ãªå¤æ°
LINQ ã§ã¯ãã¯ã¨ãªã®çµæã§ã¯ãªããã¯ã¨ãªãæ ¼ç´ãã夿°ããã¯ã¨ãªå¤æ°ã¨å¼ã³ã¾ãã å
·ä½çã«ã¯ãã¯ã¨ãªå¤æ°ã¯å¸¸ã«åæå¯è½ãªåã§ãããforeach
ã¹ãã¼ãã¡ã³ãã¾ã㯠IEnumerator.MoveNext() ã¡ã½ããã®ç´æ¥å¼ã³åºãã§å復å¦çãããã¨ãè¦ç´ ã®ã·ã¼ã±ã³ã¹ãçæããã¾ãã
ã¡ã¢
ãã®è¨äºã®ä¾ã§ã¯ã以ä¸ã®ãã¼ã¿ ã½ã¼ã¹ã¨ãµã³ãã« ãã¼ã¿ã使ç¨ãã¦ãã¾ãã
record City(string Name, long Population);
record Country(string Name, double Area, long Population, List<City> Cities);
record Product(string Name, string Category);
static readonly City[] cities = [
new City("Tokyo", 37_833_000),
new City("Delhi", 30_290_000),
new City("Shanghai", 27_110_000),
new City("São Paulo", 22_043_000),
new City("Mumbai", 20_412_000),
new City("Beijing", 20_384_000),
new City("Cairo", 18_772_000),
new City("Dhaka", 17_598_000),
new City("Osaka", 19_281_000),
new City("New York-Newark", 18_604_000),
new City("Karachi", 16_094_000),
new City("Chongqing", 15_872_000),
new City("Istanbul", 15_029_000),
new City("Buenos Aires", 15_024_000),
new City("Kolkata", 14_850_000),
new City("Lagos", 14_368_000),
new City("Kinshasa", 14_342_000),
new City("Manila", 13_923_000),
new City("Rio de Janeiro", 13_374_000),
new City("Tianjin", 13_215_000)
];
static readonly Country[] countries = [
new Country ("Vatican City", 0.44, 526, [new City("Vatican City", 826)]),
new Country ("Monaco", 2.02, 38_000, [new City("Monte Carlo", 38_000)]),
new Country ("Nauru", 21, 10_900, [new City("Yaren", 1_100)]),
new Country ("Tuvalu", 26, 11_600, [new City("Funafuti", 6_200)]),
new Country ("San Marino", 61, 33_900, [new City("San Marino", 4_500)]),
new Country ("Liechtenstein", 160, 38_000, [new City("Vaduz", 5_200)]),
new Country ("Marshall Islands", 181, 58_000, [new City("Majuro", 28_000)]),
new Country ("Saint Kitts & Nevis", 261, 53_000, [new City("Basseterre", 13_000)])
];
次ã®ã³ã¼ãä¾ã¯ããã¼ã¿ ã½ã¼ã¹ããã£ã«ã¿ã¼å¥ãããã³ä¸¦ã¹æ¿ãå¥ããããã 1 ã¤ãã¤ãããã½ã¼ã¹è¦ç´ ã®å¤æããªããç°¡åãªã¯ã¨ãªå¼ã示ãããã®ã§ãã
select
å¥ã§ã¯ã¨ãªãçµãã£ã¦ãã¾ãã
// Data source.
int[] scores = [90, 71, 82, 93, 75, 82];
// Query Expression.
IEnumerable<int> scoreQuery = //query variable
from score in scores //required
where score > 80 // optional
orderby score descending // optional
select score; //must end with select or group
// Execute the query to produce the results
foreach (var testScore in scoreQuery)
{
Console.WriteLine(testScore);
}
// Output: 93 90 82 82
ä¸è¨ã®ä¾ã§ã¯ãscoreQuery
ã ã¯ã¨ãªå¤æ°ã§ããã¯ã¨ãªå¤æ°ã¯åã«ã¯ã¨ãªã¨å¼ã°ãããã¨ãããã¾ãã ã¯ã¨ãªå¤æ°ã«ã¯ãforeach
ã«ã¼ãã§çæãããå®éã®çµæãã¼ã¿ã¯æ ¼ç´ããã¾ããã ã¾ããforeach
ã¹ãã¼ãã¡ã³ãã®å®è¡æã«ãã¯ã¨ãªçµæã¯ã¯ã¨ãªå¤æ° scoreQuery
ãéãã¦è¿ããã¾ããã çµæã¯ãå復夿° testScore
ãéãã¦è¿ããã¾ãã
scoreQuery
夿°ã¯ 2 çªç®ã® foreach
ã«ã¼ãã§å復å¦çã§ãã¾ãã ãã®å¤æ°ããã¼ã¿ ã½ã¼ã¹ã夿´ããã¦ããªããã°ãåãçµæãçæããã¾ãã
ã¯ã¨ãªå¤æ°ã«ã¯ãã¯ã¨ãªæ§æãã¡ã½ããæ§æãã¾ãã¯ããã 2 ã¤ã®çµåãã§è¡¨ç¾ãããã¯ã¨ãªãæ ¼ç´ã§ãã¾ãã æ¬¡ã®ä¾ã§ã¯ãqueryMajorCities
㨠queryMajorCities2
ã®ä¸¡æ¹ãã¯ã¨ãªå¤æ°ã§ãã
City[] cities = [
new City("Tokyo", 37_833_000),
new City("Delhi", 30_290_000),
new City("Shanghai", 27_110_000),
new City("São Paulo", 22_043_000)
];
//Query syntax
IEnumerable<City> queryMajorCities =
from city in cities
where city.Population > 30_000_000
select city;
// Execute the query to produce the results
foreach (City city in queryMajorCities)
{
Console.WriteLine(city);
}
// Output:
// City { Name = Tokyo, Population = 37833000 }
// City { Name = Delhi, Population = 30290000 }
// Method-based syntax
IEnumerable<City> queryMajorCities2 = cities.Where(c => c.Population > 30_000_000);
// Execute the query to produce the results
foreach (City city in queryMajorCities2)
{
Console.WriteLine(city);
}
// Output:
// City { Name = Tokyo, Population = 37833000 }
// City { Name = Delhi, Population = 30290000 }
ããã«å¯¾ããæ¬¡ã® 2 ã¤ã®ä¾ã¯ãããããã¯ã¨ãªã§åæåããã¦ãããã®ã®ãã¯ã¨ãªå¤æ°ã§ã¯ãªã夿°ã示ãã¦ãã¾ãã ãããã¯çµæãæ ¼ç´ãããããã¯ã¨ãªå¤æ°ã§ã¯ããã¾ããã
var highestScore = (
from score in scores
select score
).Max();
// or split the expression
IEnumerable<int> scoreQuery =
from score in scores
select score;
var highScore = scoreQuery.Max();
// the following returns the same result
highScore = scores.Max();
var largeCitiesList = (
from country in countries
from city in country.Cities
where city.Population > 10000
select city
).ToList();
// or split the expression
IEnumerable<City> largeCitiesQuery =
from country in countries
from city in country.Cities
where city.Population > 10000
select city;
var largeCitiesList2 = largeCitiesQuery.ToList();
ã¯ã¨ãªå¤æ°ã®æç¤ºçåæå®ã¨æé»çåæå®
ãã®ããã¥ã¡ã³ãã§ã¯é常ãæç¤ºçãªåã®ã¯ã¨ãªå¤æ°ã§èª¬æãè¡ãã¾ããããã¯ãã¯ã¨ãªå¤æ°ã¨ select å¥ã®é¢ä¿ã示ãããã§ãã ãã ãã var ãã¼ã¯ã¼ãã使ç¨ããã°ãã³ã³ãã¤ã«æã«ã¯ã¨ãªå¤æ° (ã¾ãã¯ãã®ä»ã®ãã¼ã«ã«å¤æ°) ã®åãæ¨è«ããããã«ã³ã³ãã¤ã©ã«æç¤ºãããã¨ãã§ãã¾ãã ãã¨ãã°ããã®è¨äºã§å ã«ç¤ºããã¯ã¨ãªã®ä¾ã¯ãæé»çãªåæå®ã使ç¨ãã¦è¡¨ç¾ãããã¨ãã§ãã¾ãã
var queryCities =
from city in cities
where city.Population > 100000
select city;
åã®ä¾ã§ãvar ã®ä½¿ç¨ã¯çç¥å¯è½ã§ãã
queryCities
ã¯ãæé»çã¾ãã¯æç¤ºçã«åæå®ããã IEnumerable<City>
ã§ãã
ã¯ã¨ãªå¼ãéå§ãã
ã¯ã¨ãªå¼ã¯ãfrom
å¥ã§å§ããå¿
è¦ãããã¾ãã ãã®å¥ã§ã¯ããã¼ã¿ ã½ã¼ã¹ã¨ç¯å²å¤æ°ãæå®ãã¾ãã ç¯å²å¤æ°ã¯ãã½ã¼ã¹ ã·ã¼ã±ã³ã¹ãèµ°æ»ãããã¨ãã®ãã½ã¼ã¹ ã·ã¼ã±ã³ã¹å
ã®é£ç¶ããåè¦ç´ ã表ãã¾ãã ç¯å²å¤æ°ã¯ããã¼ã¿ ã½ã¼ã¹å
ã®è¦ç´ ã®åã«åºã¥ãã¦å³å¯ã«åæå®ããã¾ãã æ¬¡ã®ä¾ã§ã¯ãcountries
ã Country
ãªãã¸ã§ã¯ãã®é
åã§ãããããç¯å²å¤æ°ã Country
ã¨ãã¦åæå®ããã¦ãã¾ãã ç¯å²å¤æ°ã¯å³å¯ã«åæå®ãããã®ã§ããããæ¼ç®åã使ç¨ãã¦ããã®åã®å©ç¨å¯è½ãªã¡ã³ãã¼ã«ã¢ã¯ã»ã¹ãããã¨ãã§ãã¾ãã
IEnumerable<Country> countryAreaQuery =
from country in countries
where country.Area > 20 //sq km
select country;
ç¯å²å¤æ°ã¯ãã¯ã¨ãªãã»ãã³ãã³ã¾ã㯠ç¶ç¶ å¥ã®ããããã§çµäºããã¾ã§ãç¯å²å ã«ããã¾ãã
ã¯ã¨ãªå¼ã«ã¯ãè¤æ°ã® from
å¥ãå«ãããã¨ãã§ãã¾ãã ã½ã¼ã¹ ã·ã¼ã±ã³ã¹å
ã®åè¦ç´ ãããèªä½ã³ã¬ã¯ã·ã§ã³ã§ããããã³ã¬ã¯ã·ã§ã³ãå«ãã§ããå ´åã¯ãããã« from
å¥ã使ç¨ãã¾ãã ãã¨ãã°ãCountry
ãªãã¸ã§ã¯ãã®ã³ã¬ã¯ã·ã§ã³ããããåãªãã¸ã§ã¯ãã«ãCity
ã¨ããååã® Cities
ãªãã¸ã§ã¯ãã®ã³ã¬ã¯ã·ã§ã³ãæ ¼ç´ããã¦ããã¨ãã¾ãã ãã®å ´åãå City
å
ã® Country
ãªãã¸ã§ã¯ããç
§ä¼ããã«ã¯ã次ã®ããã« 2 ã¤ã® from
å¥ã使ç¨ãã¾ãã
IEnumerable<City> cityQuery =
from country in countries
from city in country.Cities
where city.Population > 10000
select city;
詳細ã«ã¤ãã¦ã¯ãå¥ã®
ã¯ã¨ãªå¼ãçµäºãã
ã¯ã¨ãªå¼ã¯ãgroup
å¥ã¾ã㯠select
å¥ã®ããããã§çµããå¿
è¦ãããã¾ãã
group å¥
group
å¥ã¯ãæå®ãããã¼ã«ãã£ã¦ç·¨æãããã°ã«ã¼ãã®ã·ã¼ã±ã³ã¹ãçæããããã«ä½¿ç¨ãã¾ãã ãã¼ã«ã¯ãä»»æã®ãã¼ã¿åãæå®ã§ãã¾ãã ãã¨ãã°ã次ã®ã¯ã¨ãªãå®è¡ããã¨ã1 ã¤ä»¥ä¸ã® Country
ãªãã¸ã§ã¯ããå«ã¾ããå½ã®ååã®æåã®æåãå¤ã¨ãã char
åããã¼ã§ãããã°ã«ã¼ãã®ã·ã¼ã±ã³ã¹ã使ããã¾ãã
var queryCountryGroups =
from country in countries
group country by country.Name[0];
ã°ã«ã¼ãåã®è©³ç´°ã«ã¤ãã¦ã¯ãã°ã«ã¼ãå¥ãåç §ãã¦ãã ããã
select å¥
select
å¥ã¯ããã®ä»ãã¹ã¦ã®åã®ã·ã¼ã±ã³ã¹ãçæããããã«ä½¿ç¨ãã¾ãã ã·ã³ãã«ãª select
å¥ã¯ããã¼ã¿ ã½ã¼ã¹å
ã«å«ã¾ãããªãã¸ã§ã¯ãã¨åãåã®ãªãã¸ã§ã¯ãã®ã·ã¼ã±ã³ã¹ãçæãã¾ãã ãã®ä¾ã§ã¯ããã¼ã¿ ã½ã¼ã¹ã« Country
ãªãã¸ã§ã¯ããå«ã¾ãã¦ãã¾ãã
orderby
å¥ã¯è¦ç´ ãæ°ããé åºã«ä¸¦ã¹æ¿ããselect
å¥ã¯ä¸¦ã¹æ¿ãããã Country
ãªãã¸ã§ã¯ãã®ã·ã¼ã±ã³ã¹ãçæãã¾ãã
IEnumerable<Country> sortedQuery =
from country in countries
orderby country.Area
select country;
select
å¥ã¯ãã½ã¼ã¹ ãã¼ã¿ãæ°ããåã®ã·ã¼ã±ã³ã¹ã«å¤æããããã«ä½¿ç¨ã§ãã¾ãã ãã®å¤æã¯ãããã¸ã§ã¯ã·ã§ã³ã¨ãå¼ã°ãã¾ãã æ¬¡ã®ä¾ã§ã¯ãselect
å¥ã¯å
ã®è¦ç´ å
ã«ãããã£ã¼ã«ãã®ãµãã»ããã®ã¿ãå«ãã ãå¿ååã®ã·ã¼ã±ã³ã¹ãããã¸ã§ã¯ããã¾ãã æ°ãããªãã¸ã§ã¯ãã¯ããªãã¸ã§ã¯ãåæååã使ç¨ãã¦åæåããã¾ãã
var queryNameAndPop =
from country in countries
select new
{
Name = country.Name,
Pop = country.Population
};
ãããã£ã¦ããã®ä¾ã§ã¯ãã¯ã¨ãªã«ãã£ã¦å¿ååãçæããããããvar
ãå¿
è¦ã§ãã
ãã ã¸ã®ç¶ç¶
into
å¥ã¾ã㯠select
å¥ã§ group
ãã¼ã¯ã¼ãã使ç¨ããã¨ãã¯ã¨ãªãæ ¼ç´ãã䏿çãªèå¥åã使ã§ãã¾ãã ã°ã«ã¼ãåã¾ãã¯é¸ææä½ã®å¾ã«ã¯ã¨ãªã§è¿½å ã®ã¯ã¨ãªæä½ãå®è¡ããå¿
è¦ãããå ´åã¯ãinto
å¥ã使ç¨ãã¾ãã æ¬¡ã®ä¾ã§ã¯ã1 åä¸ã¨ããç¯å²ã®äººå£ã§ countries
ãã°ã«ã¼ãåãã¦ãã¾ãã ãããã®ã°ã«ã¼ãã使ãããå¾ãããã«å¥ã使ç¨ãã¦ä¸é¨ã®ã°ã«ã¼ãããã£ã«ã¿ã¼ããã°ã«ã¼ããæé ã§ä¸¦ã¹æ¿ãã¾ãã ãããã®è¿½å æä½ãå®è¡ããã«ã¯ãcountryGroup
ã§è¡¨ãããç¶ç¶ãå¿
è¦ã§ãã
// percentileQuery is an IEnumerable<IGrouping<int, Country>>
var percentileQuery =
from country in countries
let percentile = (int)country.Population / 1_000
group country by percentile into countryGroup
where countryGroup.Key >= 20
orderby countryGroup.Key
select countryGroup;
// grouping is an IGrouping<int, Country>
foreach (var grouping in percentileQuery)
{
Console.WriteLine(grouping.Key);
foreach (var country in grouping)
{
Console.WriteLine(country.Name + ":" + country.Population);
}
}
詳細ã«ã¤ãã¦ã¯ã into
ãåç
§ãã¦ãã ããã
ãã£ã«ã¿ã¼å¦çãä¸¦ã¹æ¿ããããã³çµå
éå§ã® from
å¥ã¨ãçµäºã® select
ã¾ãã¯group
å¥ã®éã«ã¯ããã®ä»ã®ãã¹ã¦ã®çç¥å¯è½å¥ (where
ãjoin
ãorderby
ãfrom
ãlet
) ãå¿
è¦ã«å¿ãã¦ä½¿ç¨ã§ãã¾ãã çç¥å¯è½ãªå¥ã¯ãããããã¯ã¨ãªæ¬ä½ã§ 0 åã¾ãã¯è¤æ°å使ç¨ã§ãã¾ãã
where å¥
where
å¥ã¯ã1 ã¤ä»¥ä¸ã®è¿°èªå¼ã«åºã¥ãã¦ãã½ã¼ã¹ ãã¼ã¿ããè¦ç´ ãé¤å¤ããããã«ä½¿ç¨ãã¾ãã æ¬¡ã®ä¾ã§ã¯ãwhere
å¥ã« 1 ã¤ã®è¿°èªã¨ 2 ã¤ã®æ¡ä»¶ãããã¾ãã
IEnumerable<City> queryCityPop =
from city in cities
where city.Population is < 15_000_000 and > 10_000_000
select city;
詳細ã«ã¤ãã¦ã¯ããwhere å¥ããåç §ãã¦ãã ããã
orderby å¥
orderby
å¥ã¯ãçµæãæé ã¾ãã¯éé ã§ä¸¦ã¹æ¿ããããã«ä½¿ç¨ãã¾ãã 第 2 ã®ä¸¦ã¹æ¿ãé åºãæå®ãããã¨ãã§ãã¾ãã æ¬¡ã®ä¾ã§ã¯ãcountry
ããããã£ã使ç¨ãã¦ãArea
ãªãã¸ã§ã¯ãã«å¯¾ãã 第 1 ã®ä¸¦ã¹æ¿ããå®è¡ãã¦ãã¾ãã ãã®å¾ãPopulation
ããããã£ã使ç¨ãã¦ç¬¬ 2 ã®ä¸¦ã¹æ¿ããå®è¡ãã¦ãã¾ãã
IEnumerable<Country> querySortedCountries =
from country in countries
orderby country.Area, country.Population descending
select country;
ascending
ãã¼ã¯ã¼ãã¯çç¥å¯è½ã§ããé åºãæå®ããã¦ããªãå ´åã¯ããããæ¢å®ã®ä¸¦ã¹æ¿ãé åºã«ãªãã¾ãã 詳ããã¯ããorderby å¥ããã覧ãã ããã
join å¥
join
å¥ã¯ãåè¦ç´ å
ã®æå®ãããã¼éã§ã®ç夿¯è¼ã«åºã¥ãã¦ã1 ã¤ã®ãã¼ã¿ ã½ã¼ã¹ã®è¦ç´ ãå¥ã®ãã¼ã¿ ã½ã¼ã¹ã®è¦ç´ ã¨é¢é£ä»ããããçµã¿åããããããããã«ä½¿ç¨ãã¾ãã LINQ ã§ã¯ãjoin æä½ã¯è¦ç´ ã®åãç°ãªããªãã¸ã§ã¯ãã®ã·ã¼ã±ã³ã¹ã«å¯¾ãã¦å®è¡ããã¾ãã 2 ã¤ã®ã·ã¼ã±ã³ã¹ãçµåããå¾ã«ã¯ãselect
ã¾ã㯠group
ã¹ãã¼ãã¡ã³ã使ç¨ãã¦ãåºåã·ã¼ã±ã³ã¹ã«æ ¼ç´ããè¦ç´ ãæå®ããå¿
è¦ãããã¾ãã ã¾ããå¿ååã使ç¨ãã¦ãé¢é£ä»ããããåè¦ç´ ã»ããã®ããããã£ããåºåã·ã¼ã±ã³ã¹ç¨ã®æ°ããåã«çµåãããã¨ãã§ãã¾ãã æ¬¡ã®ä¾ã§ã¯ãprod
ããããã£ã Category
æååé
åã®ããããã®ã«ãã´ãªã«ä¸è´ãã categories
ãªãã¸ã§ã¯ããé¢é£ä»ãã¾ãã
Category
ã categories
å
ã®ã©ã®æååã¨ãä¸è´ããªã製åã¯é¤å¤ããã¾ããselect
ã¹ãã¼ãã¡ã³ãã«ãããcat
㨠prod
ã®ä¸¡æ¹ããããããã£ãåå¾ãããæ°ããåã®ããã¸ã§ã¯ã·ã§ã³ãè¡ããã¾ãã
var categoryQuery =
from cat in categories
join prod in products on cat equals prod.Category
select new
{
Category = cat,
Name = prod.Name
};
join
ãã¼ã¯ã¼ãã使ç¨ãã¦ãinto
æä½ã®çµæã䏿夿°ã«æ ¼ç´ãããã¨ã§ãã°ã«ã¼ãçµåãå®è¡ãããã¨ãã§ãã¾ãã 詳細ã«ã¤ãã¦ã¯ãçµåå¥ãåç
§ãã¦ãã ããã
let å¥
let
å¥ã¯ãå¼ã®çµæ (ã¡ã½ããå¼ã³åºããªã©) ãæ°ããç¯å²å¤æ°ã«æ ¼ç´ããããã«ä½¿ç¨ãã¾ãã æ¬¡ã®ä¾ã§ã¯ãç¯å²å¤æ° firstName
ã«ãSplit
ã«ãã£ã¦è¿ãããæååé
åã®æåã®è¦ç´ ãæ ¼ç´ããã¦ãã¾ãã
string[] names = ["Svetlana Omelchenko", "Claire O'Donnell", "Sven Mortensen", "Cesar Garcia"];
IEnumerable<string> queryFirstNames =
from name in names
let firstName = name.Split(' ')[0]
select firstName;
foreach (var s in queryFirstNames)
{
Console.Write(s + " ");
}
//Output: Svetlana Claire Sven Cesar
詳細ã«ã¤ãã¦ã¯ããlet å¥ããåç §ãã¦ãã ããã
ã¯ã¨ãªå¼ã«ããããµãã¯ã¨ãª
ã¯ã¨ãªå¥ã«ã¯ãããèªä½ã«ã¯ã¨ãªå¼ãå«ãããã¨ãã§ãã¾ããããã¯ããµãã¯ã¨ãªã¨ãå¼ã°ãã¾ãã åãµãã¯ã¨ãªã¯ãç¬èªã® from
å¥ã§å§ã¾ããæåã® from
å¥ã§å¿
ãããåããã¼ã¿ ã½ã¼ã¹ãæãã¦ããã¨ã¯éãã¾ããã ãã¨ãã°ã次ã®ã¯ã¨ãªã¯ãselect ã¹ãã¼ãã¡ã³ãã§ grouping æä½ã®çµæãåå¾ããããã«ä½¿ç¨ãããã¯ã¨ãªå¼ã示ãã¦ãã¾ãã
var queryGroupMax =
from student in students
group student by student.Year into studentGroup
select new
{
Level = studentGroup.Key,
HighestScore = (
from student2 in studentGroup
select student2.ExamScores.Average()
).Max()
};
詳細ã«ã¤ãã¦ã¯ããã°ã«ã¼ãåæä½ã§ã®ãµãã¯ã¨ãªã®å®è¡ããåç §ãã¦ãã ããã