2020年11月09日
川俣晶の縁側ソフトウェアC# コーディング How Tototal 301 count

【入門級】クエリの書き方は2つある

Written By: 川俣 晶連絡先

 C#でLINQのクエリを書く方法は2つあります。

 1つはメソッド形式です。LINQのメソッドを生で書きます。

 もう1つはクエリ式で、専用のSQL風構文が用意されています。

 このうち見かける頻度が高いのはメソッド形式です。自由度が高く何でもできます。

 しかし、教科書やマニュアルなどに出てくる頻度はクエリ式の方が多いと感じます。こっちの方が基本的なのでしょう。

 さて、どうして同じ機能を実現する書式が2つあるのでしょうか。

 それは、LINQがもともとSQL文をソースに書き込めればいいのにね、というところからSQLそっくりの構文が用意され、それを使うためのサポートメソッドが整備されたからです。でも、データベースと関係利用者にはSQLなど関係ないし、メソッドを直接使った方がより柔軟性が高いので、クエリ式はあまり好まれていないように感じられます。

 (私? 私も普段はメソッド形式しか使いません)

罠の数々 §

  • 実行結果を見ると492549となっていて49が繰り返されているように見えるが、実際は4, 9, 25, 49の並びで、4と9が連続して49に見えているだけである

参考リンク §

from 句 (C# リファレンス)

where 句 (C# リファレンス)

select 句 (C# リファレンス)

Enumerable.Where メソッド

Enumerable.Select メソッド

 where句とWhereメソッド、select句とSelectメソッド、それぞれ何が違うのだろうか。上記のリンクから辿って確認してみよう。

リポジトリ §

https://github.com/autumn009/cshowto

TwoQuery §

using System;

using System.Linq;

class Program

{

    static void Main()

    {

        int[] array = { 2, 3, 5, 7, 11, 13, 17 };

        // メソッド形式

        var q1 = array.Where(c => c < 10).Select(c => c * c);

        // クエリ式

        var q2 = from c in array where c < 10 select c * c;

        foreach (var item in q1) Console.Write(item);

        Console.WriteLine();

        foreach (var item in q2) Console.Write(item);

        Console.WriteLine();

    }

}

実行結果

492549

492549

Facebook

COOL C# CREW

C#ハウツー連載の解説増量、カラーのソース、新規書き下ろし追加の読みやすい単行本はこちら。

C#ハウツー: 逆引き入門・こんな機能はどう書くの?
キーワード【 川俣晶の縁側ソフトウェアC# コーディング How To
【C# コーディング How To】の次のコンテンツ
2020年
11月
10日
【入門級】32bit環境か64bit環境か判定する
3days 4 count
total 504 count
【C# コーディング How To】の前のコンテンツ
2020年
11月
08日
【入門級】if (!(i != 2 && i != 4))を短くする
3days 1 count
total 324 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

https://mag.autumn.org/tb.aspx/20201109090648
サイトの表紙【C# コーディング How To】の表紙【C# コーディング How To】のコンテンツ全リスト 【C# コーディング How To】の入手全リスト 【C# コーディング How To】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.