Bagikan melalui


Queryable.FirstOrDefault Metode

Definisi

Mengembalikan elemen pertama dari urutan, atau nilai default jika tidak ada elemen yang ditemukan.

Overload

FirstOrDefault<TSource>(IQueryable<TSource>)

Mengembalikan elemen pertama dari urutan, atau nilai default jika urutan tidak berisi elemen.

FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>)

Mengembalikan elemen pertama dari urutan yang memenuhi kondisi tertentu atau nilai default jika tidak ada elemen tersebut yang ditemukan.

FirstOrDefault<TSource>(IQueryable<TSource>, TSource)

Mengembalikan elemen pertama dari urutan, atau nilai default jika urutan tidak berisi elemen.

FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>, TSource)

Mengembalikan elemen pertama dari urutan yang memenuhi kondisi atau nilai default jika tidak ada elemen tersebut yang ditemukan.

FirstOrDefault<TSource>(IQueryable<TSource>)

Sumber:
Queryable.cs
Sumber:
Queryable.cs
Sumber:
Queryable.cs

Mengembalikan elemen pertama dari urutan, atau nilai default jika urutan tidak berisi elemen.

public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
 static TSource FirstOrDefault(System::Linq::IQueryable<TSource> ^ source);
public static TSource FirstOrDefault<TSource> (this System.Linq.IQueryable<TSource> source);
public static TSource? FirstOrDefault<TSource> (this System.Linq.IQueryable<TSource> source);
static member FirstOrDefault : System.Linq.IQueryable<'Source> -> 'Source
<Extension()>
Public Function FirstOrDefault(Of TSource) (source As IQueryable(Of TSource)) As TSource

Jenis parameter

TSource

Jenis elemen source.

Parameter

source
IQueryable<TSource>

IQueryable<T> untuk mengembalikan elemen pertama.

Mengembalikan

TSource

default(TSource) jika source kosong; jika tidak, elemen pertama di source.

Pengecualian

sourceadalah null.

Contoh

Contoh kode berikut menunjukkan cara menggunakan FirstOrDefault<TSource>(IQueryable<TSource>) pada urutan kosong.

// Create an empty array.
int[] numbers = { };
// Get the first item in the array, or else the
// default value for type int (0).
int first = numbers.AsQueryable().FirstOrDefault();

Console.WriteLine(first);

/*
    This code produces the following output:

    0
*/
' Create an empty array.
Dim numbers() As Integer = {}
' Get the first item in the array, or else the 
' default value for type int, which is 0.
Dim first As Integer = numbers.AsQueryable().FirstOrDefault()

MsgBox(first)

' This code produces the following output:

' 0

Terkadang nilai default(TSource) bukan nilai default yang ingin Anda gunakan jika koleksi tidak berisi elemen. Alih-alih memeriksa hasil untuk nilai default yang tidak diinginkan lalu mengubahnya jika perlu, Anda dapat menggunakan DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) metode untuk menentukan nilai default yang ingin Anda gunakan jika koleksi kosong. Kemudian, panggil First<TSource>(IQueryable<TSource>) untuk mendapatkan elemen pertama. Contoh kode berikut menggunakan kedua teknik untuk mendapatkan nilai default 1 jika kumpulan bulan numerik kosong. Karena nilai default untuk bilangan bulat adalah 0, yang tidak sesuai dengan bulan apa pun, nilai default harus ditentukan sebagai 1 sebagai gantinya. Variabel hasil pertama diperiksa untuk nilai default yang tidak diinginkan setelah kueri selesai. Variabel hasil kedua diperoleh dengan memanggil DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) untuk menentukan nilai default 1.

List<int> months = new List<int> { };

// Setting the default value to 1 after the query.
int firstMonth1 = months.AsQueryable().FirstOrDefault();
if (firstMonth1 == 0)
{
    firstMonth1 = 1;
}
Console.WriteLine("The value of the firstMonth1 variable is {0}", firstMonth1);

// Setting the default value to 1 by using DefaultIfEmpty() in the query.
int firstMonth2 = months.AsQueryable().DefaultIfEmpty(1).First();
Console.WriteLine("The value of the firstMonth2 variable is {0}", firstMonth2);

/*
 This code produces the following output:

 The value of the firstMonth1 variable is 1
 The value of the firstMonth2 variable is 1
*/
Dim months As New List(Of Integer)(New Integer() {})

' Setting the default value to 1 after the query.
Dim firstMonth1 As Integer = months.AsQueryable().FirstOrDefault()
If firstMonth1 = 0 Then
    firstMonth1 = 1
End If
MsgBox(String.Format("The value of the firstMonth1 variable is {0}", firstMonth1))

' Setting the default value to 1 by using DefaultIfEmpty() in the query.
Dim firstMonth2 As Integer = months.AsQueryable().DefaultIfEmpty(1).First()
MsgBox(String.Format("The value of the firstMonth2 variable is {0}", firstMonth2))

' This code produces the following output:
'
' The value of the firstMonth1 variable is 1
' The value of the firstMonth2 variable is 1

Keterangan

Metode ini FirstOrDefault<TSource>(IQueryable<TSource>) menghasilkan MethodCallExpression yang mewakili pemanggilan FirstOrDefault<TSource>(IQueryable<TSource>) dirinya sebagai metode generik yang dibangun. Kemudian meneruskan MethodCallExpression ke Execute<TResult>(Expression) metode dari yang IQueryProvider diwakili oleh Provider properti source parameter .

Perilaku kueri yang terjadi sebagai akibat dari menjalankan pohon ekspresi yang mewakili panggilan FirstOrDefault<TSource>(IQueryable<TSource>) tergantung pada implementasi jenis source parameter. Perilaku yang diharapkan adalah bahwa ia mengembalikan elemen pertama di source, atau nilai default jika source kosong.

Metode FirstOrDefault ini tidak menyediakan cara untuk menentukan nilai default yang akan dikembalikan jika source kosong. Jika Anda ingin menentukan nilai default selain default(TSource), gunakan metode seperti yang DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) dijelaskan di bagian Contoh.

Berlaku untuk

FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>)

Sumber:
Queryable.cs
Sumber:
Queryable.cs
Sumber:
Queryable.cs

Mengembalikan elemen pertama dari urutan yang memenuhi kondisi tertentu atau nilai default jika tidak ada elemen tersebut yang ditemukan.

public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
 static TSource FirstOrDefault(System::Linq::IQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, bool> ^> ^ predicate);
public static TSource FirstOrDefault<TSource> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,bool>> predicate);
public static TSource? FirstOrDefault<TSource> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,bool>> predicate);
static member FirstOrDefault : System.Linq.IQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, bool>> -> 'Source
<Extension()>
Public Function FirstOrDefault(Of TSource) (source As IQueryable(Of TSource), predicate As Expression(Of Func(Of TSource, Boolean))) As TSource

Jenis parameter

TSource

Jenis elemen source.

Parameter

source
IQueryable<TSource>

Untuk IQueryable<T> mengembalikan elemen dari.

predicate
Expression<Func<TSource,Boolean>>

Fungsi untuk menguji setiap elemen untuk suatu kondisi.

Mengembalikan

TSource

default(TSource) jika source kosong atau jika tidak ada elemen yang lulus tes yang ditentukan oleh predicate; jika tidak, elemen pertama dalam source yang lulus tes yang ditentukan oleh predicate.

Pengecualian

source atau predicate adalah null.

Contoh

Contoh kode berikut menunjukkan cara menggunakan FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) dengan meneruskan predikat. Pada kueri kedua, tidak ada elemen dalam urutan yang memenuhi kondisi.

string[] names = { "Hartono, Tommy", "Adams, Terry",
                     "Andersen, Henriette Thaulow",
                     "Hedlund, Magnus", "Ito, Shu" };

// Get the first string in the array that is longer
// than 20 characters, or the default value for type
// string (null) if none exists.
string firstLongName =
    names.AsQueryable().FirstOrDefault(name => name.Length > 20);

Console.WriteLine("The first long name is '{0}'.", firstLongName);

// Get the first string in the array that is longer
// than 30 characters, or the default value for type
// string (null) if none exists.
string firstVeryLongName =
    names.AsQueryable().FirstOrDefault(name => name.Length > 30);

Console.WriteLine(
    "There is {0} name that is longer than 30 characters.",
    string.IsNullOrEmpty(firstVeryLongName) ? "NOT a" : "a");

/*
    This code produces the following output:

    The first long name is 'Andersen, Henriette Thaulow'.
    There is NOT a name that is longer than 30 characters.
*/
Dim names() As String = {"Hartono, Tommy", "Adams, Terry", _
                     "Andersen, Henriette Thaulow", _
                     "Hedlund, Magnus", "Ito, Shu"}

' Get the first string in the array that is longer
' than 20 characters, or the default value for type
' string (null) if none exists.
Dim firstLongName As String = _
            names.AsQueryable().FirstOrDefault(Function(name) name.Length > 20)

MsgBox(String.Format("The first long name is '{0}'.", firstLongName))

' Get the first string in the array that is longer
' than 30 characters, or the default value for type
' string (null) if none exists.
Dim firstVeryLongName As String = _
    names.AsQueryable().FirstOrDefault(Function(name) name.Length > 30)

MsgBox(String.Format( _
    "There is {0} name that is longer than 30 characters.", _
    IIf(String.IsNullOrEmpty(firstVeryLongName), "NOT a", "a")))

' This code produces the following output:
'
' The first long name is 'Andersen, Henriette Thaulow'.
' There is NOT a name that is longer than 30 characters.

Keterangan

Metode ini memiliki setidaknya satu parameter jenis Expression<TDelegate> yang argumen jenisnya adalah salah satu jenisnya Func<T,TResult> . Untuk parameter ini, Anda dapat meneruskan ekspresi lambda dan akan dikompilasi ke Expression<TDelegate>.

Metode ini FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) menghasilkan MethodCallExpression yang mewakili pemanggilan FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) dirinya sebagai metode generik yang dibangun. Kemudian meneruskan MethodCallExpression ke Execute<TResult>(Expression) metode dari yang IQueryProvider diwakili oleh Provider properti source parameter .

Perilaku kueri yang terjadi sebagai akibat dari menjalankan pohon ekspresi yang mewakili panggilan FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) tergantung pada implementasi jenis source parameter. Perilaku yang diharapkan adalah bahwa ia mengembalikan elemen pertama yang source memenuhi kondisi dalam predicate, atau nilai default jika tidak ada elemen yang memenuhi kondisi.

Berlaku untuk

FirstOrDefault<TSource>(IQueryable<TSource>, TSource)

Sumber:
Queryable.cs
Sumber:
Queryable.cs
Sumber:
Queryable.cs

Mengembalikan elemen pertama dari urutan, atau nilai default jika urutan tidak berisi elemen.

public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
 static TSource FirstOrDefault(System::Linq::IQueryable<TSource> ^ source, TSource defaultValue);
public static TSource FirstOrDefault<TSource> (this System.Linq.IQueryable<TSource> source, TSource defaultValue);
static member FirstOrDefault : System.Linq.IQueryable<'Source> * 'Source -> 'Source
<Extension()>
Public Function FirstOrDefault(Of TSource) (source As IQueryable(Of TSource), defaultValue As TSource) As TSource

Jenis parameter

TSource

Jenis elemen source.

Parameter

source
IQueryable<TSource>

IEnumerable<T> untuk mengembalikan elemen pertama.

defaultValue
TSource

Nilai default yang akan dikembalikan jika urutannya kosong.

Mengembalikan

TSource

defaultValue jika source kosong; jika tidak, elemen pertama di source.

Pengecualian

sourceadalah null.

Berlaku untuk

FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>, TSource)

Sumber:
Queryable.cs
Sumber:
Queryable.cs
Sumber:
Queryable.cs

Mengembalikan elemen pertama dari urutan yang memenuhi kondisi atau nilai default jika tidak ada elemen tersebut yang ditemukan.

public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
 static TSource FirstOrDefault(System::Linq::IQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, bool> ^> ^ predicate, TSource defaultValue);
public static TSource FirstOrDefault<TSource> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,bool>> predicate, TSource defaultValue);
static member FirstOrDefault : System.Linq.IQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, bool>> * 'Source -> 'Source
<Extension()>
Public Function FirstOrDefault(Of TSource) (source As IQueryable(Of TSource), predicate As Expression(Of Func(Of TSource, Boolean)), defaultValue As TSource) As TSource

Jenis parameter

TSource

Jenis elemen source.

Parameter

source
IQueryable<TSource>

Untuk IEnumerable<T> mengembalikan elemen dari.

predicate
Expression<Func<TSource,Boolean>>

Fungsi untuk menguji setiap elemen untuk suatu kondisi.

defaultValue
TSource

Nilai default yang akan dikembalikan jika urutannya kosong.

Mengembalikan

TSource

defaultValue jika source kosong atau jika tidak ada elemen yang lulus tes yang ditentukan oleh predicate; jika tidak, elemen pertama dalam source yang lulus tes yang ditentukan oleh predicate.

Pengecualian

source atau predicate adalah null.

Berlaku untuk