統合言語クエリとは? わかりやすく解説

統合言語クエリ

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/01/14 10:27 UTC 版)

統合言語クエリ (Language INtegrated Query; LINQ, リンクと発音する) とは、.NET Framework 3.5において、様々な種類のデータ集合に対して標準化された方法でデータを問い合わせること(クエリ)を可能にするために、言語に統合された機能のことである。開発ツールはVisual Studio 2008から対応している。

統合言語問合せという表記も見られる[1]:43

C#による例を示す。このコードでは、fruitsの中から"m"で始まるものを取り出し、それをretに格納し、それをforeach文で順に出力している(実際にはret遅延評価される)。

using System;
using System.Linq; // LINQ拡張メソッドの利用に必要。メソッド構文ではなくクエリ構文を使用する場合でも必要となる。

public class Test
{
  public static void Main()
  {
    string[] fruits =
    {
      "apple",
      "cherry",
      "melon",
      "orange",
      "marron",
      "mango",
    };
    // クエリ構文
    Console.WriteLine("Query Syntax");
    {
      // fromからselectまでの一連の式がLINQクエリ式である。
      var ret = from x in fruits
                where !string.IsNullOrEmpty(x) && x[0] == 'm'
                select x;
      foreach (var e in ret)
      {
        Console.WriteLine(e);
      }
    }
    // メソッド構文
    Console.WriteLine("Method Syntax");
    {
      // オブジェクトをフィルタリングする条件(述語)を、ラムダ式で指定する。
      var ret = fruits.Where(x => !string.IsNullOrEmpty(x) && x[0] == 'm');
      foreach (var e in ret)
      {
        Console.WriteLine(e);
      }
    }
  }
}

言語仕様

LINQに対応する言語は、LINQを自然に導入するための新しい言語仕様が併せて追加されている。代表的な例を以下に示す。

クエリ式
SQLのような問い合わせ言語風の文法が取り入れられた。これはメソッド構文の構文糖となっている。
拡張メソッド
同様のデータ構造に対して後から操作を追加するために取り入れられた。例えば、LINQ to Objectの場合はIEnumerableインターフェイスの拡張メソッドとして標準クエリ演算子を含むメソッド群が追加された。
ラムダ式
従来の匿名メソッドに取って代わる構文として導入された。引数の型が省略できることや、式木に変換することができることで、自然にLINQを導入できるようにした。
匿名型
クエリの結果や途中の値を一時的な値の組合せで保持できるよう導入された。クエリ結果の格納を意図しているため、匿名型の各値は読み取り専用プロパティとなっている。

C#における仕様の詳細はC# 3.0からの仕様を参照されたい。

標準クエリ演算子

主な標準クエリ演算子を挙げる。

制限演算子

  • Whereは、指定した述語をもとに要素のフィルタ処理を行う。高階関数filterに相当する。

プロジェクション演算子

  • Selectは、指定した評価関数をもとに要素のプロジェクションを行う。高階関数mapに相当する。
  • SelectManyは、指定した評価関数をもとに1対多のプロジェクションを行う。

結合演算子

  • Joinは指定したキーセレクタをもとに等価結合を行う。
  • GroupJoinは指定したキーセレクタをもとにグループ化結合を行う。

順序付け演算子

  • OrderBy,ThenByは指定したキーセレクタをもとに結果の順序を指定する。

グループ化演算子

  • GroupByは指定したキーセレクタをもとにグループ化を行う。

集計演算子

  • Aggregateは、指定した累積関数をもとにシーケンスの集計を行う。高階関数foldに相当する。


データソース

LINQはサードパーティーによるものを含め、あらゆる種類のデータソースに対して適用することができる。これは、標準クエリ演算子に対応する機能を拡張メソッドとしてデータソースに追加することで実現している。

従来では同種のデータ型やオブジェクトの集合に対して列挙やソート、フィルタを効率的に扱うために配列 (Arrayクラス) やコレクションオブジェクトが用いられた。一方、データベースXML上のデータ集合はADO.NETによってデータセットとして取り扱われており異なる操作が必要であった。LINQによって、これらのオブジェクトやデータセットを区別せず共通的に扱うことが可能となった。

例えば、マイクロソフトによるものでは次のような実装がある。

  • LINQ to Objects (あらゆるコレクション/列挙子をLINQクエリで操作可能にする)
  • LINQ to XML (XLinq)
  • LINQ to ADO.NET
    • LINQ to SQL (DLinq / SQL Server専用)
    • LINQ to Entities (SQL Server / Oracle Database / MySQL / SQLite等)
    • LINQ to DataSet (DataSetに対する拡張メソッドにより、LINQクエリを記述可能とする)
  • Azure Table Storage (Windows AzureのキーバリューストアでLINQクエリを記述可能とする)

サードパーティー製データソースとしては、以下が挙げられる。

LINQに対応する言語

次の言語がLINQに対応する。

  • C# 3.0 以降
  • F# 1.1.8.1 以降
  • Visual Basic 9.0 以降
  • Delphi Prism 2009 (Oxygene)

C++/CLIはLINQに対応する予定はなく、従来通りの構文でLINQ関係のライブラリを使用できるのみである。

その他の言語での実装

LINQは、LINQの思想に感化された人々により、マイクロソフト系のプログラミング言語にとどまらず、さまざまなプログラミング言語向けの実装が行われている。

注釈

出典

参考文献

外部リンク


統合言語クエリ

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/08/17 21:54 UTC 版)

C SharpとJavaの比較」の記事における「統合言語クエリ」の解説

C#には、統合言語クエリの為の拡張されたキーワード群が存在しソースコード上でSQL構文似たクエリ直接記述することができる。このキーワード群は構文糖として機能し決められ拡張メソッド呼び出し展開される。 // 数列から偶数抜き出して表示するvar inputs = new[] { 1, 5, 2, 3, 4, 7, 11, 10, 6 };#if true// LINQクエリ構文var results = from inputValue in inputs where (inputValue % 2) == 0 select inputValue;#else// LINQメソッド構文var results = inputs. Where(inputValue => (inputValue % 2) == 0). Select(inputValue => inputValue);#endifforeach (var resultValue in results){ Console.WriteLine(resultValue);} 統合言語クエリの拡張メソッド群は、コレクション対すさまざまな集合演算実装されており、このような演算ロジック記述することなく簡単に操作することができる。また、ラムダ式から式ツリーExpressionクラス)のインスタンス生成することが出来るため、この機能使用してデータベースへのクエリ発行収集を、タイプセーフ性を失うことなく直接的に行うことができる(LINQ to SQLLINQ to Entitiesなど)。Javaでは、このようなクエリ構文直接サポートしない。Java8ではC#LINQメソッド構文に近い記述が可能となるStream APIラムダ式サポートされた。

※この「統合言語クエリ」の解説は、「C SharpとJavaの比較」の解説の一部です。
「統合言語クエリ」を含む「C SharpとJavaの比較」の記事については、「C SharpとJavaの比較」の概要を参照ください。

ウィキペディア小見出し辞書の「統合言語クエリ」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



固有名詞の分類


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「統合言語クエリ」の関連用語

統合言語クエリのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



統合言語クエリのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアの統合言語クエリ (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのC SharpとJavaの比較 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS