.NET TIPS

LINQのクエリ結果から先頭の要素だけを取り出すには?[3.5、C#、VB]

デジタルアドバンテージ 遠藤 孝信
2009/12/03

 LINQによるクエリは常にオブジェクトのリストを返すが、クエリ結果が多くとも1つであると分かっている場合や、並べ替えた結果の先頭要素のみを取得したい場合などでは、その1つの要素を、Firstメソッドを使って取得できる。しかし、Firstメソッドはクエリ条件にマッチする要素が見つからない場合にInvalidOperationException例外を発生してしまう。

 例外を発生させることなく、このような処理を行いたい場合には、Firstメソッドではなく、FirstOrDefaultメソッドを利用すればよい。これらはEnumerableクラス(System.Linq名前空間)などで実装されている拡張メソッドである。

 FirstOrDefaultメソッドを使用したコード例を次に示す。ここでは、複数のUriオブジェクトから条件にマッチするUriオブジェクトを取り出すために、LINQのクエリを利用している。

using System;
using System.Linq;

class Program
{
  static void Main(string[] args)
  {
    // テスト用データ
    Uri[] urls = new Uri[]
    {
      new Uri("http://www.testserver.com"),
      new Uri("http://www.testserver.com:8080"),
      new Uri("http://www.dbserver.com"),
      new Uri("http://www.dbserver.com:8080"),
      new Uri("http://www.proxyserver.com"),
    };

    // 「devserver」を含むホスト名のUriを1つ取得
    Uri oneDevServer = (from n in urls
                        where n.Host.Contains("devserver")
                        select n).FirstOrDefault();

    if (oneDevServer == null)
    {
      Console.WriteLine("そのようなサーバはありません。");
    }
    // 出力:そのようなサーバはありません。
  }
}
Imports System
Imports System.Linq

Class Program
  Shared Sub Main()

    ' テスト用データ
    Dim urls As Uri() = New Uri() { _
      New Uri("http://www.testserver.com"), _
      New Uri("http://www.testserver.com:8080"), _
      New Uri("http://www.dbserver.com"), _
      New Uri("http://www.dbserver.com:8080"), _
      New Uri("http://www.proxyserver.com") _
    }

    ' 「devserver」を含むホスト名のUriを1つ取得
    Dim oneDevServer As Uri = _
                    (From n In urls _
                     Where n.Host.Contains("devserver") _
                     Select n).FirstOrDefault()

    If oneDevServer Is Nothing Then
      Console.WriteLine("そのようなサーバはありません。")
    End If
    '  出力:そのようなサーバはありません。

  End Sub
End Class
FirstOrDefaultメソッドを使用したコード例(上:C#、下:VB)

 FirstOrDefaultメソッドは、対象となるリストに要素が見つからない場合には、既定値(デフォルト値)を返す。要素が参照型(何らかのクラスのオブジェクト)である場合の既定値はnull(VBではNothing)である。End of Article

利用可能バージョン:.NET Framework 3.5以降
カテゴリ:クラス・ライブラリ 処理対象:LINQ
使用ライブラリ:Enumerableクラス(System.Linq名前空間)

この記事と関連性の高い別の.NET TIPS
LINQ文で動的にWhere句を組み立てるには?
リスト(List)の列挙中にリスト要素を削除するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

TechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH