クエリ構文とメソッド構文
同じLINQをクエリ構文またはメソッド構文で記述し、コンパイラーによる変換と、それぞれの構文を選ぶ場面を確認します。
「クエリ構文とメソッド構文」はCoddyKit上の無料C# Academyレッスンです。 これはレッスン3/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC# Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C# Academyコースには全3レッスンが含まれています。
2つの構文
LINQの2つの書き方:
- メソッド構文: xs.Where(...).Select(...)
- クエリ構文: from x in xs where ... select ...
- ほとんどの演算子では、両者は同等です。
メソッド構文
メソッド構文では、WhereやSelectなどの拡張メソッドをチェーンします。
using System;
using System.Linq;
public class Program
{
public static void Main(string[] args)
{
string[] words = new string[] { "dog", "tiger", "ant", "eagle" };
var result = words
.Where(w => w.Length >= 4)
.Select(w => w.ToUpper());
foreach (string w in result) Console.WriteLine(w);
}
}
クエリ構文
クエリ構文はSQLのように、from、where、selectを使って読みます。コンパイラはこれをメソッド呼び出しに変換します。
using System;
using System.Linq;
public class Program
{
public static void Main(string[] args)
{
string[] words = new string[] { "dog", "tiger", "ant", "eagle" };
var query =
from w in words
where w.Length >= 4
select w.ToUpper();
foreach (string w in query) Console.WriteLine(w);
}
}
どちらの構文でも並べ替え
どちらの書き方でも、フィルタリング、並べ替え、選択に対応しています。結果は同じになります。
using System;
using System.Linq;
public sealed class City
{
public string Name;
public int Pop;
public City(string name, int pop) { Name = name; Pop = pop; }
}
public class Program
{
public static void Main(string[] args)
{
City[] cities = new City[]
{
new City("Rome", 2873000),
new City("Oslo", 634000),
new City("Riga", 605000),
new City("Rio", 6748000)
};
// Method
var m = cities
.Where(c => c.Pop >= 700000)
.OrderBy(c => c.Name)
.Select(c => c.Name);
// Query
var q =
from c in cities
where c.Pop >= 700000
orderby c.Name ascending
select c.Name;
foreach (string name in m) Console.WriteLine(name);
Console.WriteLine("---");
foreach (string name in q) Console.WriteLine(name);
}
}
構文の混在
すべての演算子にクエリキーワードがあるわけではありません。スタイルを混在させるのは一般的です。クエリを書いてからCount、Skip、Take、またはThenByを呼び出します。
using System;
using System.Linq;
public class Program
{
public static void Main(string[] args)
{
int[] data = new int[] { 5, 3, 9, 1, 7, 2, 8 };
// Query + method mix: query part, then Count() method
var q =
from n in data
where n > 3
select n;
int howMany = q.Count(); // no query keyword for Count
Console.WriteLine("Count >3 = " + howMany);
// Paging usually uses method syntax
var page = data.OrderBy(n => n).Skip(2).Take(3);
foreach (int x in page) Console.WriteLine(x);
}
}
使い分け
指針:
- 短いチェーンや、クエリキーワードがない演算子にはメソッド構文を使います。
- 複数の手順によるフィルタリングや並べ替えを読みやすく表現できる場合はクエリ構文を使います。
- 必要に応じて混在させます。両者は同等です。
クエリ構文とメソッド構文の真実
要約
要約: クエリ構文とメソッド構文は、同じLINQを異なる形で表したものです。最も読みやすい書き方を選び、クエリキーワードがない演算子がある場合は混在させます。
よくある質問
「クエリ構文とメソッド構文」レッスンは無料ですか?
はい。「クエリ構文とメソッド構文」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C# Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C# Academyコースには全3レッスンが含まれています。
「クエリ構文とメソッド構文」で何を学びますか?
同じLINQをクエリ構文またはメソッド構文で記述し、コンパイラーによる変換と、それぞれの構文を選ぶ場面を確認します。 ブラウザで直接実行するハンズオンコードでC# Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C# Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC# Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/3です。
「クエリ構文とメソッド構文」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC# Academyレッスンでコードを書いて実行できますか?
はい。すべてのC# Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。