Language_Integrated_Queryとは - わかりやすく解説 Weblio辞書 (original) (raw)

LINQ」はこの項目へ転送されています。 アイドルグループについては「LinQ」をご覧ください。 その他の用法については「リンク」をご覧ください。

統合言語クエリ (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からの仕様を参照されたい。

標準クエリ演算子

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

制限演算子

プロジェクション演算子

結合演算子

順序付け演算子

グループ化演算子

集計演算子

データソース

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

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

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

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

LINQに対応する言語

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

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

その他の言語での実装

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

注釈

  1. ^ [1]
  2. ^ JSINQ - LINQ to Objects for JavaScript - CodePlex Archive
  3. ^ linq.js - LINQ for JavaScript - CodePlex Archive
  4. ^ LINQ to JavaScript - CodePlex Archive
  5. ^ PHPLinq - LINQ for PHP - Language Integrated Query - CodePlex Archive
  6. ^ [2]
  7. ^ [3]
  8. ^ JaQu
  9. ^ [4]
  10. ^ GitHub - heynemann/pynq: Python implementation of Microsoft's .Net Language Integrated Query (LINQ)
  11. ^ [5]

出典

  1. ^ Oracle 2017.

参考文献

外部リンク

.NET
アーキテクチャ 共通言語基盤 アセンブリ メタデータ マネージコード 基本クラスライブラリ .NET Standard 仮想実行システム Roslyn Native AOT
共通言語基盤 共通言語ランタイム 共通型システム 共通中間言語 動的言語ランタイム
言語 C# Visual Basic .NET F# PowerShell C++/CLIマネージ拡張) †J# JScript .NET IronPython IronRuby Nemerle Boo PiechPie(英語版) / †PhalangerSpec#
パッケージマネージャ NuGet myget ProGet
関連技術 Azure MAUI(英語版) †Xamarin Blazor Aspire Uno Platform(英語版) †UWP Avalonia UI(英語版WPF WCF WF WCS Windows Forms ASP.NET ADO.NET ASP.NET MVC Framework Entity Framework ClickOnce XAMLSilverlight LINQ †.NET Remoting MSBuild XSP ML.NET(英語版Windows UI Library Windows App SDK(英語版
その他のCLI実装 .NET Core .NET Framework Mono シェアードソースCLI Portable.NET .NET nanoFramework .NET Micro Framework .NET Compact FrameworkMicrosoft XNA
組織 .NET Foundation Microsoft Xamarin
開発環境 Visual Studio Visual Studio Code JetBrains Rider(英語版MonoDevelop / Xamarin Studio SharpDevelop
その他 async/await MVVM ReactiveX(英語版
カテゴリ