カドルドエグ 的个人资料たま(ご)の記録照片日志列表更多 工具 帮助

日志


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クラスで定義)
 

评论

请稍候...
很抱歉,您输入的评论太长。请缩短您的评论。
您没有输入任何内容,请重试。
很抱歉,我们当前无法添加您的评论。请稍后重试。
若要添加评论,需要您的家长授予您相应权限。请求权限
您的家长禁用了评论功能。
很抱歉,我们当前无法删除您的评论。请稍后重试。
您已超过了一天之内允许提供的评论数上限。请在 24 小时后重试。
因为我们的系统表明您可能在向其他用户提供垃圾评论,您的帐户已禁用了评论功能。如果您认为我们错误地禁用了您的帐户,请联系 Windows Live 支持部门
完成下面的安全检查,您提供评论的过程才能完成。
您在安全检查中键入的字符必须与图片或音频中的字符一致。

若要添加评论,请使用您的 Windows Live ID 登录(如果您使用过 Hotmail、Messenger 或 Xbox LIVE,您就拥有 Windows Live ID)。登录


还没有 Windows Live ID 吗?请注册

引用通告

此日志的引用通告 URL 是:
http://txmxkxmxontheball.spaces.live.com/blog/cns!772A2551521E51A0!891.trak
引用此项的网络日志