Queryable.SingleOrDefault Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Mengembalikan satu elemen tertentu dari urutan, atau nilai default jika tidak ada elemen tersebut yang ditemukan.
Overload
SingleOrDefault<TSource>(IQueryable<TSource>, TSource) |
Mengembalikan satu-satunya elemen urutan, atau nilai default jika urutannya kosong; metode ini melemparkan pengecualian jika ada lebih dari satu elemen dalam urutan. |
SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>, TSource) |
Mengembalikan satu-satunya elemen urutan yang memenuhi kondisi tertentu atau nilai default jika tidak ada elemen tersebut; metode ini memberikan pengecualian jika lebih dari satu elemen memenuhi kondisi. |
SingleOrDefault<TSource>(IQueryable<TSource>) |
Mengembalikan satu-satunya elemen urutan, atau nilai default jika urutannya kosong; metode ini melemparkan pengecualian jika ada lebih dari satu elemen dalam urutan. |
SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) |
Mengembalikan satu-satunya elemen urutan yang memenuhi kondisi tertentu atau nilai default jika tidak ada elemen tersebut; metode ini memberikan pengecualian jika lebih dari satu elemen memenuhi kondisi. |
SingleOrDefault<TSource>(IQueryable<TSource>, TSource)
- Sumber:
- Queryable.cs
- Sumber:
- Queryable.cs
- Sumber:
- Queryable.cs
Mengembalikan satu-satunya elemen urutan, atau nilai default jika urutannya kosong; metode ini melemparkan pengecualian jika ada lebih dari satu elemen dalam urutan.
public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
static TSource SingleOrDefault(System::Linq::IQueryable<TSource> ^ source, TSource defaultValue);
public static TSource SingleOrDefault<TSource> (this System.Linq.IQueryable<TSource> source, TSource defaultValue);
static member SingleOrDefault : System.Linq.IQueryable<'Source> * 'Source -> 'Source
<Extension()>
Public Function SingleOrDefault(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 tunggal.
- defaultValue
- TSource
Nilai default yang akan dikembalikan jika urutannya kosong.
Mengembalikan
Elemen tunggal dari urutan input, atau defaultValue
jika urutan tidak berisi elemen.
Pengecualian
source
null
.
Urutan input berisi lebih dari satu elemen.
Berlaku untuk
SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>, TSource)
- Sumber:
- Queryable.cs
- Sumber:
- Queryable.cs
- Sumber:
- Queryable.cs
Mengembalikan satu-satunya elemen urutan yang memenuhi kondisi tertentu atau nilai default jika tidak ada elemen tersebut; metode ini memberikan pengecualian jika lebih dari satu elemen memenuhi kondisi.
public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
static TSource SingleOrDefault(System::Linq::IQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, bool> ^> ^ predicate, TSource defaultValue);
public static TSource SingleOrDefault<TSource> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,bool>> predicate, TSource defaultValue);
static member SingleOrDefault : System.Linq.IQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, bool>> * 'Source -> 'Source
<Extension()>
Public Function SingleOrDefault(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>
IEnumerable<T> untuk mengembalikan satu elemen.
- predicate
- Expression<Func<TSource,Boolean>>
Fungsi untuk menguji elemen untuk kondisi.
- defaultValue
- TSource
Nilai default yang akan dikembalikan jika urutannya kosong.
Mengembalikan
Elemen tunggal dari urutan input yang memenuhi kondisi, atau defaultValue
jika tidak ada elemen seperti itu yang ditemukan.
Pengecualian
source
atau predicate
null
.
Lebih dari satu elemen memenuhi kondisi dalam predicate
.
Berlaku untuk
SingleOrDefault<TSource>(IQueryable<TSource>)
- Sumber:
- Queryable.cs
- Sumber:
- Queryable.cs
- Sumber:
- Queryable.cs
Mengembalikan satu-satunya elemen urutan, atau nilai default jika urutannya kosong; metode ini melemparkan pengecualian jika ada lebih dari satu elemen dalam urutan.
public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
static TSource SingleOrDefault(System::Linq::IQueryable<TSource> ^ source);
public static TSource SingleOrDefault<TSource> (this System.Linq.IQueryable<TSource> source);
public static TSource? SingleOrDefault<TSource> (this System.Linq.IQueryable<TSource> source);
static member SingleOrDefault : System.Linq.IQueryable<'Source> -> 'Source
<Extension()>
Public Function SingleOrDefault(Of TSource) (source As IQueryable(Of TSource)) As TSource
Jenis parameter
- TSource
Jenis elemen source
.
Parameter
- source
- IQueryable<TSource>
IQueryable<T> untuk mengembalikan elemen tunggal.
Mengembalikan
Elemen tunggal dari urutan input, atau default
(TSource
) jika urutan tidak berisi elemen.
Pengecualian
source
null
.
source
memiliki lebih dari satu elemen.
Contoh
Contoh kode berikut menunjukkan cara menggunakan SingleOrDefault<TSource>(IQueryable<TSource>) untuk memilih satu-satunya elemen array. Kueri kedua menunjukkan bahwa SingleOrDefault<TSource>(IQueryable<TSource>) mengembalikan nilai default ketika urutan tidak berisi tepat satu elemen.
// Create two arrays. The second is empty.
string[] fruits1 = { "orange" };
string[] fruits2 = { };
// Get the only item in the first array, or else
// the default value for type string (null).
string fruit1 = fruits1.AsQueryable().SingleOrDefault();
Console.WriteLine("First Query: " + fruit1);
// Get the only item in the second array, or else
// the default value for type string (null).
string fruit2 = fruits2.AsQueryable().SingleOrDefault();
Console.WriteLine("Second Query: " +
(String.IsNullOrEmpty(fruit2) ? "No such string!" : fruit2));
/*
This code produces the following output:
First Query: orange
Second Query: No such string!
*/
' Create two arrays. The second is empty.
Dim fruits1() As String = {"orange"}
Dim fruits2() As String = {}
' Get the only item in the first array, or else
' the default value for type string (null).
Dim fruit1 As String = fruits1.AsQueryable().SingleOrDefault()
MsgBox("First Query: " + fruit1)
' Get the only item in the second array, or else
' the default value for type string (null).
Dim fruit2 As String = fruits2.AsQueryable().SingleOrDefault()
MsgBox("Second Query: " & _
IIf(String.IsNullOrEmpty(fruit2), "No such string!", fruit2))
' This code produces the following output:
' First Query: orange
' Second Query: No such string!
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 metode DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) untuk menentukan nilai default yang ingin Anda gunakan jika koleksi kosong. Kemudian, panggil Single<TSource>(IQueryable<TSource>) untuk mendapatkan elemen . Contoh kode berikut menggunakan kedua teknik untuk mendapatkan nilai default 1 jika kumpulan nomor halaman kosong. Karena nilai default untuk bilangan bulat adalah 0, yang biasanya bukan nomor halaman yang valid, 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.
int[] pageNumbers = { };
// Setting the default value to 1 after the query.
int pageNumber1 = pageNumbers.AsQueryable().SingleOrDefault();
if (pageNumber1 == 0)
{
pageNumber1 = 1;
}
Console.WriteLine("The value of the pageNumber1 variable is {0}", pageNumber1);
// Setting the default value to 1 by using DefaultIfEmpty() in the query.
int pageNumber2 = pageNumbers.AsQueryable().DefaultIfEmpty(1).Single();
Console.WriteLine("The value of the pageNumber2 variable is {0}", pageNumber2);
/*
This code produces the following output:
The value of the pageNumber1 variable is 1
The value of the pageNumber2 variable is 1
*/
Dim pageNumbers() As Integer = {}
' Setting the default value to 1 after the query.
Dim pageNumber1 As Integer = pageNumbers.AsQueryable().SingleOrDefault()
If pageNumber1 = 0 Then
pageNumber1 = 1
End If
MsgBox(String.Format("The value of the pageNumber1 variable is {0}", pageNumber1))
' Setting the default value to 1 by using DefaultIfEmpty() in the query.
Dim pageNumber2 As Integer = pageNumbers.AsQueryable().DefaultIfEmpty(1).Single()
MsgBox(String.Format("The value of the pageNumber2 variable is {0}", pageNumber2))
' This code produces the following output:
' The value of the pageNumber1 variable is 1
' The value of the pageNumber2 variable is 1
Keterangan
Metode SingleOrDefault<TSource>(IQueryable<TSource>) menghasilkan MethodCallExpression yang mewakili panggilan SingleOrDefault<TSource>(IQueryable<TSource>) itu sendiri sebagai metode generik yang dibangun. Kemudian meneruskan MethodCallExpression ke metode Execute<TResult>(Expression)IQueryProvider yang diwakili oleh properti Provider parameter source
.
Perilaku kueri yang terjadi sebagai akibat dari menjalankan pohon ekspresi yang mewakili panggilan SingleOrDefault<TSource>(IQueryable<TSource>) tergantung pada implementasi jenis parameter source
. Perilaku yang diharapkan adalah bahwa ia mengembalikan satu-satunya elemen dalam source
, atau nilai default jika source
kosong.
Metode SingleOrDefault tidak menyediakan cara untuk menentukan nilai default. Jika Anda ingin menentukan nilai default selain default(TSource)
, gunakan metode DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) seperti yang dijelaskan di bagian Contoh.
Berlaku untuk
SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>)
- Sumber:
- Queryable.cs
- Sumber:
- Queryable.cs
- Sumber:
- Queryable.cs
Mengembalikan satu-satunya elemen urutan yang memenuhi kondisi tertentu atau nilai default jika tidak ada elemen tersebut; metode ini memberikan pengecualian jika lebih dari satu elemen memenuhi kondisi.
public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
static TSource SingleOrDefault(System::Linq::IQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, bool> ^> ^ predicate);
public static TSource SingleOrDefault<TSource> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,bool>> predicate);
public static TSource? SingleOrDefault<TSource> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,bool>> predicate);
static member SingleOrDefault : System.Linq.IQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, bool>> -> 'Source
<Extension()>
Public Function SingleOrDefault(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>
IQueryable<T> untuk mengembalikan satu elemen.
- predicate
- Expression<Func<TSource,Boolean>>
Fungsi untuk menguji elemen untuk kondisi.
Mengembalikan
Elemen tunggal dari urutan input yang memenuhi kondisi dalam predicate
, atau default
(TSource
) jika tidak ada elemen tersebut yang ditemukan.
Pengecualian
source
atau predicate
null
.
Lebih dari satu elemen memenuhi kondisi dalam predicate
.
Contoh
Contoh kode berikut menunjukkan cara menggunakan SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) untuk memilih satu-satunya elemen array yang memenuhi kondisi. Kueri kedua menunjukkan bahwa SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) mengembalikan nilai default ketika urutan tidak berisi tepat satu elemen yang memenuhi kondisi.
string[] fruits = { "apple", "banana", "mango",
"orange", "passionfruit", "grape" };
// Get the single string in the array whose length is greater
// than 10, or else the default value for type string (null).
string fruit1 =
fruits.AsQueryable().SingleOrDefault(fruit => fruit.Length > 10);
Console.WriteLine("First Query: " + fruit1);
// Get the single string in the array whose length is greater
// than 15, or else the default value for type string (null).
string fruit2 =
fruits.AsQueryable().SingleOrDefault(fruit => fruit.Length > 15);
Console.WriteLine("Second Query: " +
(String.IsNullOrEmpty(fruit2) ? "No such string!" : fruit2));
/*
This code produces the following output:
First Query: passionfruit
Second Query: No such string!
*/
Dim fruits() As String = _
{"apple", "banana", "mango", "orange", "passionfruit", "grape"}
' Get the single string in the array whose length is greater
' than 10, or else the default value for type string (null).
Dim fruit1 As String = _
fruits.AsQueryable().SingleOrDefault(Function(fruit) fruit.Length > 10)
' Display the result.
MsgBox("First Query: " & fruit1)
' Get the single string in the array whose length is greater
' than 15, or else the default value for type string (null).
Dim fruit2 As String = _
fruits.AsQueryable().SingleOrDefault(Function(fruit) fruit.Length > 15)
MsgBox("Second Query: " & _
IIf(String.IsNullOrEmpty(fruit2), "No such string!", fruit2))
' This code produces the following output:
' First Query: passionfruit
' Second Query: No such string!
Keterangan
Metode ini memiliki setidaknya satu parameter jenis Expression<TDelegate> yang argumen jenisnya adalah salah satu jenis Func<T,TResult>. Untuk parameter ini, Anda dapat meneruskan ekspresi lambda dan akan dikompilasi ke Expression<TDelegate>.
Metode SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) menghasilkan MethodCallExpression yang mewakili panggilan SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) itu sendiri sebagai metode generik yang dibangun. Kemudian meneruskan MethodCallExpression ke metode Execute<TResult>(Expression)IQueryProvider yang diwakili oleh properti Provider parameter source
.
Perilaku kueri yang terjadi sebagai akibat dari menjalankan pohon ekspresi yang mewakili panggilan SingleOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) tergantung pada implementasi jenis parameter source
. Perilaku yang diharapkan adalah bahwa ia mengembalikan satu-satunya elemen dalam source
yang memenuhi kondisi yang ditentukan oleh predicate
, atau nilai default jika tidak ada elemen tersebut.