カドルドエグ 的个人资料たま(ご)の記録照片日志列表更多 ![]() | 帮助 |
|
|
10月29日 イノベーションセンターでのLINQセミナーに参加してきました昨日未明にたまたまキャンセル待ちで入ることができたので急遽参加。
ちょうど、LINQについての知識がほとんど皆無だったので非常にためになりました。
一応、正式に.NETに組み込まれたときから存在だけは知っているし本もちょこっと持ってはいるものの、
積読しっぱなしだわ聞きっぱなしだわで。。。
今回はハンズオンもあり、基本の部分を少しだけではあるけど書けるようにはなりました^^;
以下、知ってる人からすればあまりにも「今更」なメモ。。。。
----------------------------------------------------------------------------
・LINQは、「全て一つで事足りる」ことに依存せず、「操作」について共通利用する。
「構造」について平準化するものではないことに注意。
・LINQといえば必ず紹介されるこういう↓スタイル(クエリ構文)
IEnumerable<string> result = from p in places
where p.Legth == 2
order by p
select p.Substring(0,1);
は、以下の表現を簡素化したものである。
IEnumerable<string> result = places.Where(p => p.Length == 2).OrderBy(p => p).Select(p => p.Substring(0,1));
→これを「糖衣構文(シンタックスシュガー)」と呼ぶ。
・LINQはコンパイルされると最終的に拡張メソッドに変換される
→クエリ構文ではLINQの全機能を使うことはできない(クエリ構文でカバーされてないものが多々ある)
・LINQというか拡張メソッドのイメージ(前述のメソッド構文を例にした場合)
places:元のコレクション > Where:データの絞り込み > OrderBy:データの並び変え > Select:データを加工し新しいコレクションとして返す
左から右へ値が引き渡され、フィルタリングされているイメージ:パイプライン処理
・前述で書いたようなLINQ処理は、その場で行われて(今回の場合)resultに格納されてはいない。
この後で、foreachなどでresultが使用されるときにはじめて動作する。
結果セットをインメモリで保持しないので別途保存(ToArray()など)が必要。
・C#及びVB:手続き型プログラミング = 問題の解法を記述
→LINQは、そこに宣言的プログラミング(= 問題そのもの、必要とする結果を表現)を持ち込んだものである。
問題の抽出方法はLINQの実装側が考えること。
・従来との対比
<<LINQなし>>
List<String> companyNames = new List<String>();
List<String> result = new List<String>();
foreach(string c in companeNames)
{
if(c == "Microsoft")
{
result.Add(c);
}
}
<<LINQあり>>
List<String> companeNames = new List<String>();
return from c in companeNames
where c == "Microsoft"
select c;
やってることは同じでも表現がとてもすっきりしている
・C#内でのLINQは、C#2.0~3.0にかけての新しい技術で成立している。
→デリゲートや匿名メソッド、拡張メソッド、ラムダ式など ・クエリ構文で使用される「句」はメソッド構文にしたときの「演算子」に相当。
※一部除く。詳細はMSDN等を見てください ・クエリ結果は、RangeやAll、Anyといったメソッドで活用させることができる。
※詳細はMSDN等で。 ・よくあるLINQプロバイダ…
LINQ to Object:配列やListなど
LINQ to SQL:SQLServerへのアクセスをサポート。 対象は2000~2008及びCompact 3.5。 DataContextがポイント。 ストアドの呼び出しも可。但しどんどん遅延していくので注意。 LINQ to XML:3.5から加わったSystem.Xml.Linq名前空間内のクラスを使用。より直感的に扱えるようになった。 Xmlをインメモリで取り扱う。 VBではXMLリテラルなどの機能で直にコード内にXMLが書けるが……。 LINQ to Objectにあった標準的なクエリ拡張メソッドの他、XML用のも用意されている。(System.Xml.Linq.Extentionクラスで定義) 引用通告此日志的引用通告 URL 是: http://txmxkxmxontheball.spaces.live.com/blog/cns!772A2551521E51A0!891.trak 引用此项的网络日志
|
|
|