LINQをやるぞ!
LINQをやるぞ!
使う資料はC#3.0の仕様書です。プリント版がAddison-Wesleyから発売、フリーのWordフォーマットがMSDNに落ちています。
普通にC#勉強したい人はどっかから本買ってきてください。Java経験者なら割と楽です。C++経験しているとさらに楽でしょう。
では、さっそく
p.223の7.15のQuery ExpressionがC#のLINQにあたる部分です。
Query expressions provide a language integrated syntax for queries that is similar to relational and hierarchical query languages such as SQL and XQuery.
文法規則が書いてあるので、示された規則の中で構文が最小のもの構成にすると、以下のような式をかけばとりあえずOKになりそう。
from <identifier> in <expression> select <expression>
- from
- Each from clause is a generator introducing a range variable which ranges over the elements of a sequence.
- select
- select or group clause specifies the shape of the result in terms of the range variables.
じゃ、簡単な例からいってみよう!
List<String> list = new List<string>(); list.Add("apple computer"); list.Add("microsoft"); list.Add("sunmicrosystems"); list.Add("ibm"); var hoge = from a in list select a + " = " + a; foreach(string a in hoge){ Console.WriteLine(a); // それぞれ "apple computer = apple computer"...と表示される }
メモ
- 7.15.1 Ambiguities in query expressionsは大切じゃないので無視しておk
- とりあえず今さらだけどC#3.0の新しい機能について紹介されています。必要な人は要チェックや!
query-expression:
from-clause query-body
from-clause:
from type(opt) identifier in expression
query-body:
query-body-clauses(opt) select-or-group-clause query-continuation(opt)
query-body-clauses:
query-body-clause
query-body-clauses query-body-clause
query-body-clause:
from-clause
let-clause
where-clause
join-clause
join-into-clause
orderby-clause
let-clause:
let identifier = expression
where-clause:
where boolean-expression
join-clause:
join type(opt) identifier in expression on expression equals expression
join-into-clause:
join type(opt) identifier in expression on expression equals expression into identifier
orderby-clause:
orderby orderings
orderings:
ordering
orderings , ordering
ordering:
expression ordering-direction(opt)
ordering-direction:
ascending
descending
select-or-group-clause:
select-clause
group-clause
select-clause:
select expression
group-clause:
group expression by expression
query-continuation:
into identifier query-body