いろいろ備忘録日記

主に .NET とか Go とか Python絡みのメモを公開しています。

Linq

Linq入門記-31 (LINQ To Object, Distinct)

今回は、Distinct拡張メソッドについてです。 Distinct拡張メソッドは、SQLでのDISTINCTと同じです。重複するデータを除いてくれます。 重複するデータを除くという処理は、実務ではよくお目にかかる処理です。 今までは、ループして重複するデータを除いた…

Linq入門記-30 (LINQ To Object, GroupJoin)

今回は、GroupJoin拡張メソッドについてです。 GroupJoin拡張メソッドは、クエリ式での「join xx in xx on xx equals xx into xx」に対応する拡張メソッドです。 LINQでのグループ結合については、以前の記事で記述していますので、そちらを参照下さればと思…

Linq入門記-28 (CodeProject, Linq DLinq XLinq PLinq All at one place)

CodeProjectにて、各LINQの実装について分かりやすくまとめて下さっている記事があったので メモメモ。 Linq (Linq to Objects) DLinq (Linq to SQL / Linq to Entities) XLinq (Linq to XML) PLinq (Linq to Parallel) についてまとめてあります。 Linq DLi…

Linq入門記-29 (LINQ To Object, Join)

今回は、Join拡張メソッドについてです。 Join拡張メソッドは、クエリ式での「join xx in xx on xx equals xx」に対応する拡張メソッドです。 LINQでの結合については、以前の記事で記述していますので、そちらを参照下さればと思います。 Linq入門記-09 (ク…

Linq入門記-27 (LINQ To Object, GroupBy)

今回は、GroupBy拡張メソッドについてです。 GroupBy拡張メソッドは、クエリ式での「group xx by xx.xx」に対応する拡張メソッドです。 LINQでのグルーピングについては、以前の記事で記述していますので、そちらを参照下さればと思います。 Linq入門記-05 (…

Linq入門記-26 (LINQ To Object, Reverse)

今回は、Reverse拡張メソッドについてです。 Reverse拡張メソッドは、その文字とおりソースシーケンスを逆順に変換するだけの動きをします。 書式は以下の通りです。 public static IEnumerable<TSource> Reverse<TSource>( this IEnumerable<TSource> source ) 以下、サンプルです。 #r</tsource></tsource></tsource>…

Linq入門記-24 (LINQ To Object, OrderBy, OrderByDescending)

OrderBy及びOrderByDescendingは、ともに並び替えを行うクエリ演算子です。 SQLでもおなじみのものなので、あまり説明することがありませんw OrderBy及びOrderByDescendingメソッドは、単一キーでのソートを行います。 複合キーでのソートを行う場合には、…

Linq入門記-25 (LINQ To Object, ThenBy, ThenByDescending)

前回に引き続き、今回はThenByとThenByDescendingです。 説明の方は、前回で大体行っているので、今回はサンプルのみとします。 ThenByとThenByDescendingは、複合キーにてソートする際にOrderByメソッドと 組み合わせて利用します。 ThenBy及びThenByDescen…

Linq入門記-23 (LINQ To Object, SelectMany)

今回は、SelectMany拡張メソッドについてです。 SelectMany拡張メソッドは、Select拡張メソッドと同じように 特定のシーケンスに対して射影を行いますが、最後に結果のシーケンスを 平坦化して返してくれるメソッドです。 なんか文字で書くと、書きづらいの…

Linq入門記-22 (LINQ To Object, Select)

今回は、Select拡張メソッドについてです。 このメソッドも、クエリ式でおなじみなので 特に特記することはありませんw Select拡張メソッドは、2つのオーバーロードを持っており 以下の書式となっています。 public static IEnumerable<TResult> Select<TSource, TResult>( this IEnume</tsource,></tresult>…

Linq入門記-21 (LINQ To Object, Where)

今回は、Where拡張メソッドについてです。 このメソッドは、クエリ式でおなじみなので 特に特記することはありませんw Where拡張メソッドは、2つのオーバーロードを持っており 以下の書式となっています。 public static IEnumerable<TSource> Where<TSource>( this IEnumerab</tsource></tsource>…

Linq入門記-18 (LINQ To Object, 拡張メソッド解決, 拡張メソッド, Extension Method)

今回は、拡張メソッド解決について記述します。 本来であれば、変換演算子の「AsEnumerableメソッド」について 記述するところなのですが、AsEnumerableメソッドの主な利用方法が この拡張メソッド解決に絡んできますので、先にこちらを説明しておこうと思い…

Linq入門記-19 (LINQ To Object, 変換演算子, AsEnumerable)

今回で、変換演算子は終わりです。 最後の変換演算子は、「AsEnumerable」メソッドです。 AsEnumerableメソッドは、以下の書式となっています。 public static IEnumerable<TSource> AsEnumerable<TSource>( this IEnumerable<TSource> source ) 書式を見たら分かると思いますが、このメ</tsource></tsource></tsource>…

Linq入門記-20 (LINQ Dynamic Query ライブラリ, 動的LINQ)

LINQでクエリを作成していると、どうしてもしたくなるのが 動的にクエリの条件とかを指定したいな〜という願望です。 本来、型セーフな状態で利用するのが一番いいのですが 業務ではそうも言ってられない時も多いです。 そんなときは、以下のDynamic Query L…

Linq入門記-17 (LINQ To Object, 変換演算子, Cast)

前回に引き続き、変換演算子についてです。 今回は、Castメソッドです。 Castメソッドは、OfTypeメソッドとほとんど一緒です。 違いは、OfTypeメソッドでは変換対象となる型ではないオブジェクトは 除外されますが、Castメソッドの場合InvalidCastException…

Linq入門記-16 (LINQ To Object, 変換演算子, OfType)

前回に引き続き、変換演算子についてです。 今回は、OfTypeメソッドです。 OfTypeメソッドは、対象となるシーケンスを特定の型のみのシーケンスに 変換するメソッドです。 OfTypeメソッドの書式は、以下のようになっています。 public static IEnumerable<TResult> Of</tresult>…

Linq入門記-15 (LINQ To Object, 変換演算子, ToLookup)

前回に引き続き、変換演算子についてです。 今回は、ToLookupメソッドです。 ToLookupメソッドは、ToDictionaryメソッドと似ていて どちらも、キーと値の組み合わせを持ちます。 違いは、一対多のマッピングデータを構築出来る点です。 ToDictionaryメソッド…

Linq入門記-14 (LINQ To Object, 変換演算子, ToDictionary)

前回に引き続き、変換演算子についてです。 今回は、ToDictionaryメソッドです。ToDictionaryメソッドは、文字通り結果をDictionaryに変換してくれます。 個人的には、よく利用するメソッドです。 前回までのToArrayやToListと違い、ToDictionaryは引数を与…

Linq入門記-12 (LINQ To Object, 変換演算子, ToArray)

今回から、LINQ To Objectの各演算子をちょこちょこメモっていこうと思います。 まず最初は、変換演算子から。 最初は、SelectとかWhereとかから始めるのが筋ですが、個人的にLINQ使っていて しょっちゅう利用するのが、私の場合変換演算子なのです。w LINQ…

Linq入門記-13 (LINQ To Object, 変換演算子, ToList)

前回に引き続き、変換演算子についてです。 今回は、ToListメソッドです。 前回やったToArrayメソッドと、ほとんど変わりません。 配列で結果が取得できるか、リストで取得できるかの違いです。 Listで取得した方が便利な場合が多いので、私はもっぱらToArra…

Linq入門記-11 (クエリキーワード, クエリ構文, 結合, join, 左外部結合, left outer join, equals, DefaultIfEmpty)

今回は、左外部結合です。Linqでは外部結合もサポートされていますが、いわゆる左外部結合(LEFT OUTER JOIN)のみが行えます。 SQLでいうRIGHT OUTER JOINやFULL OUTER JOINはサポートされていません。 やり方なのですが、以下の手順を踏みます。 まずグルー…

Linq入門記-09 (クエリキーワード, クエリ構文, 結合, join, 内部結合, inner join, equals, cross join)

今回から数回に分けて、結合について記述します。 結合とは、文字通り特定のシーケンスと特定のシーケンスをキー単位で等しいもの 同士をくっつける処理です。 Linqでは、以下の結合処理が用意されています。 内部結合 グループ化結合 左外部結合 今回は、内…

Linq入門記-10 (クエリキーワード, クエリ構文, 結合, join, グループ化結合, group join, equals, into)

今回は、グループ化結合です。 グループ化結合って名前はすごく難しそうですが 実際は以下のように通常のjoinの後ろにintoを付けるだけです。 from x in ListX join y in ListY on x.Id equals y.Id into groupJoinY 何が変わるかというと、結果の持ち方が変…

Linq入門記-07 (クエリキーワード, クエリ構文, クエリ結果を一時保持, into, select, group, join)

今回は、intoについてです。 intoキーワードは、クエリ結果を一時保存する際に利用します。 具体的には、selectやgroup byやjoinなどのクエリ結果を保持します。 追加のクエリを更に行う際に利用します。 例を挙げると以下のような感じです。 from x in List…

Linq入門記-08 (クエリキーワード, クエリ構文, 一時変数を作成, let)

今回は、letについてです。 letキーワードは、クエリ内で一時変数を作成する際に利用します。 前回紹介したintoはクエリ結果を一時保持するもので、今回のletは 純粋に一時変数みたいな位置づけです。 例を挙げると以下のような感じです。 from x in ListX l…

Linq入門記-06 (クエリキーワード, クエリ構文, ソート, 並び替え, orderby, ascending, descending)

今回は、ソートです。 Linqで、ソートを行うにはSQLでもおなじみのorder byを利用します。 以下のように記述します。 orderby ソート条件となる値 {ascending | descending} order byではなく、orderbyである事に注意です。 また、ascendingは省略可能となり…

Linq入門記-05 (クエリキーワード, クエリ構文, グルーピング, group, IGrouping)

続いて、今回はgroupキーワードです。 名前の通り、Linqにてグルーピングを行う場合に利用します。 概念的にやっぱりSQLのgroup byに近いです。 なので、SQLが分かっている人には理解しやすいと思います。 以下のように記述します。 from x in ListA group x…

Linq入門記-01 (遅延実行、例外処理, try, catch)

C# 4.0もそろそろ足音が聞こえてくる今日この頃。 今更ながら、Linq入門し始めました。w (最近、技術の進化が速すぎるように感じます・・・・) すごく便利なのは分かっているのですが、バリバリ使っていますかというと 実務では全然使っていないです。(…

Linq入門記-02 (クエリキーワード, クエリ構文, from)

今回は、クエリキーワードの中でもselectと並んで必ず見る fromです。 そのままの動作ですが、元となるデータから 一つずつ要素を取り出してくれます。 inの右にかけるのは以下のインターフェースを実装しているクラスとなります。 IEnumerable IEnumerable …

Linq入門記-03 (クエリキーワード, クエリ構文, select)

今回は、selectキーワードについてです。 selectキーワードもfromキーワードと同じく必ず利用するものです。 基本的にSQLのselectと同じように射影を行います。 主に2つの使い方があります。 単純に抽出した結果をそのまま返す from x in ListA select x; 抽…