SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Visual StudioでDB連携も簡単プログラミング ~知っておきたいLINQメソッド式&ラムダ式

Entity FrameworkとLINQで快適DBプログラミング

Visual StudioでDB連携も簡単プログラミング ~知っておきたいLINQメソッド式&ラムダ式 第1回


  • このエントリーをはてなブックマークに追加

 .NET Framework 3.5から導入されたLINQ(Language INtegrated Query:統合言語クエリ)、活用していますか? ぱっと見の構文の目新しさに気を取られ、「また何か新しい文法を覚えなくてはいけないのか……」と敬遠しがちかもしれません。また、「シンプルな構文でクエリが書けるのは便利そうだけど、別にこれまでの方法で書いても問題無いのでは?」「なんだかパズルっぽい使い方ばかりで、実業務にどう活用できるのかイメージが湧かない」という意見もあるでしょう。LINQの持つポテンシャルは大変高く、特にデータベースとの連携においては非常に強力な仕方でコーディングをサポートしてくれます。本連載では、データベースプログラミングにおいてLINQをどのように活用できるのか、解説していきます。

  • このエントリーをはてなブックマークに追加

はじめに

 本連載では、データベース連携全体を扱うには紙面が足りませんので、主にデータベースからのクエリ処理(SQLのSELECT文に相当)について解説します。また、ユーザーインタフェースについては今回考慮せず、コマンドラインアプリケーションとして作成します。データベースアクセスについての基本を抑えておけば、ASP.NETやASP.NET MVC、Windowsデスクトップアプリなど、様々な分野に応用できます。

 第1、2回を通して、本連載に必要な基礎知識を解説します。第1回ではLINQおよびラムダ式の概要について解説し、第2回で実際のクエリ処理を解説します。

 第3回では、LINQが実際にどのようなSQLに変換されるのかを解説します。単純にクエリが書けたとしても、実処理において「N+1問題」などのパフォーマンス的な問題が起きることは少なくありません。SQLを確認しつつ、対処方法について解説します。

 第4回では、LINQではどの程度の機能を使用できるのか、SQLとの対応関係について解説します。実際のクエリを書いていく中で、どの機能は使えるのかを理解していきましょう。

 冒頭に挙げたような、「食わず嫌いだけどLINQはちょっと……」「ADO.NETなどを使ってデータベースアクセスは書いてきたけど、LINQって何なの? 美味しいの?」といった方には、本連載を是非オススメします。また、他の言語やWebアプリケーションフレームワークの開発経験がある方にも是非LINQに触れていただくきっかけになれば幸いです。

 なお、本連載ではデータベースアクセスにEntity Framework Code Firstというフレームワークを使用します。幾らかの解説は記事中に含めていますが、詳細については、CodeZineの過去記事「Entity Frameworkコードファーストで開発してみよう」などを参照してください。

対象読者

  • C#についての基本的な知識を持っていること
  • SQLやデータベースの基本的な知識を持っていること
  • LINQ未経験者、初学者

必要な環境

 本連載では以下の環境でサンプルを実行します。

  • Windows 7(8、8.1も対応)
  • Visual Studio 2013 Update 3

LINQとは~クエリ式とメソッド式~

 まず、「LINQとはなんぞや」という問いから考えましょう。冒頭に上げた統合言語クエリ(Language INtegrated Query)という名の通り、LINQはプログラミング言語(C#やVB)に統合されたクエリ用言語です。通常データベースアクセスに使用するSQLが、C#やVBのプログラム内では文字列として扱われるのに対し、LINQはそれ自体が言語に統合されたクエリとして認識されます。また、SQLの対象は基本的にリレーショナルデータベースに限られますが、LINQの対象は、配列・コレクション・データベース・XMLなど多岐にわたります。

 1つLINQのサンプルを見てみましょう。リスト1は、文字列配列から文字列長6のものを検索してソートし、大文字に変換する、というクエリ処理をLINQで書いたものです。

リスト1 LINQのサンプル(クエリ式)
//クエリ対象文字列配列
string[] names = { "Doi", "Tanaka", "Nakamura", "Saitou", "Yamada" };
//配列から、文字列長が6の文字列を検索し、辞書順にソートし、大文字に変換するLINQ
IEnumerable<string> query = from s in names where s.Length == 6
  orderby s select s.ToUpper();
//カンマを挟んで結果を出力
Console.WriteLine(string.Join(",", query));
//出力結果: SAITOU,TANAKA,YAMADA

 「処理内容は分かるけど、わざわざ新しい構文まで覚える必要があるのかな……」というのが率直な感想でしょうか。それでは、以下はどうでしょうか。

リスト2 LINQのサンプル(メソッド式)
//上記クエリ式をメソッド式に置き換えたもの
query = names.Where(x => x.Length == 6).OrderBy(x => x).Select(x => x.ToUpper());
//出力結果は同じ
Console.WriteLine(string.Join(",", query));

 これは、リスト1のLINQと同じ処理になります。「x => ...」という書き方が見慣れないかもしれませんが、Where(条件絞込)、OrderBy(並び替え)、Select(選択)というメソッドを連続して呼び出しているだけですので、比較的処理内容が掴みやすいのではないでしょうか。リスト1のLINQの書き方をクエリ式、リスト2のLINQの書き方をメソッド式と呼びます。LINQというとクエリ式の方がイメージされますが、クエリ式で書ける内容はメソッド式でも書くことができますので、無理にクエリ式を覚えなくとも、メソッド式を使えば大丈夫です[*]。クエリ式のように「最初にfrom~inを書いて、次にwhereで、次はorderbyかな?」と構文自体に悩む必要がないので、メソッド式の方が習得は早いかもしれません。

 まずは「クエリ式だけがLINQじゃない。メソッド式なら割と簡単かも」と覚えてください。本連載ではここでクエリ式は封印し、後はメソッド式のみで解説していきます。

[*]実際には、クエリ式よりもメソッド式の方が対応する機能が多く、メソッド式でしか書けない処理も存在します。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
ラムダ式とは

修正履歴

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
Visual StudioでDB連携も簡単プログラミング ~知っておきたいLINQメソッド式&ラムダ式連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 土井 毅(ドイ ツヨシ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8312 2015/01/05 17:38

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング