Queryable.FirstOrDefault Queryable.FirstOrDefault Queryable.FirstOrDefault Queryable.FirstOrDefault Method

定義

傳回序列的第一個項目;如果找不到任何項目,則傳回預設值。Returns the first element of a sequence, or a default value if no element is found.

多載

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

傳回序列的第一個元素;如果序列中沒有包含任何元素,則傳回預設值。Returns the first element of a sequence, or a default value if the sequence contains no elements.

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

傳回序列中符合指定之條件的第一個項目;如果找不到這類項目,則傳回預設值。Returns the first element of a sequence that satisfies a specified condition or a default value if no such element is found.

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

傳回序列的第一個元素;如果序列中沒有包含任何元素,則傳回預設值。Returns the first element of a sequence, or a default value if the sequence contains no elements.

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);
static member FirstOrDefault : System.Linq.IQueryable<'Source> -> 'Source
<Extension()>
Public Function FirstOrDefault(Of TSource) (source As IQueryable(Of TSource)) As TSource

類型參數

TSource

source 項目的類型。The type of the elements of source.

參數

source
IQueryable<TSource>

要傳回第一個項目的 IQueryable<T>The IQueryable<T> to return the first element of.

傳回

TSource TSource TSource TSource

如果 source 是空的,則為 default(TSource);否則為 source 中的第一個項目。default(TSource) if source is empty; otherwise, the first element in source.

例外狀況

範例

下列程式碼範例示範如何在空FirstOrDefault<TSource>(IQueryable<TSource>)的序列上使用。The following code example demonstrates how to use FirstOrDefault<TSource>(IQueryable<TSource>) on an empty sequence.

// 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

如果集合中沒有default(TSource)包含任何元素, 有時的值不是您想要使用的預設值。Sometimes the value of default(TSource) is not the default value that you want to use if the collection contains no elements. 如果集合是空的, 您可以使用DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource)方法來指定您想要使用的預設值, 而不是檢查不必要的預設值的結果, 然後在必要時加以變更。Instead of checking the result for the unwanted default value and then changing it if necessary, you can use the DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) method to specify the default value that you want to use if the collection is empty. 然後, 呼叫First<TSource>(IQueryable<TSource>)以取得第一個元素。Then, call First<TSource>(IQueryable<TSource>) to obtain the first element. 如果數值月份的集合是空的, 下列程式碼範例會使用這兩種技術來取得預設值1。The following code example uses both techniques to obtain a default value of 1 if a collection of numeric months is empty. 因為整數的預設值是 0 (未對應至任何月份), 所以預設值必須改為指定為1。Because the default value for an integer is 0, which does not correspond to any month, the default value must be specified as 1 instead. 查詢完成之後, 第一個結果變數會檢查是否有不必要的預設值。The first result variable is checked for the unwanted default value after the query is completed. 第二個結果變數的取得方式DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource)是呼叫來指定預設值1。The second result variable is obtained by calling DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) to specify a default value of 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

備註

方法會產生, 其代表以FirstOrDefault<TSource>(IQueryable<TSource>)結構化泛型方法的方式呼叫本身。 MethodCallExpression FirstOrDefault<TSource>(IQueryable<TSource>)The FirstOrDefault<TSource>(IQueryable<TSource>) method generates a MethodCallExpression that represents calling FirstOrDefault<TSource>(IQueryable<TSource>) itself as a constructed generic method. 然後, 它會MethodCallExpression將傳遞Execute<TResult>(Expression)至由Provider source參數IQueryProvider的屬性所表示之的方法。It then passes the MethodCallExpression to the Execute<TResult>(Expression) method of the IQueryProvider represented by the Provider property of the source parameter.

因執行代表呼叫FirstOrDefault<TSource>(IQueryable<TSource>)之運算式樹狀架構而產生的查詢行為, 取決於source參數類型的實作為。The query behavior that occurs as a result of executing an expression tree that represents calling FirstOrDefault<TSource>(IQueryable<TSource>) depends on the implementation of the type of the source parameter. 預期的行為是它會傳回中source的第一個元素, 如果source是空的, 則為預設值。The expected behavior is that it returns the first element in source, or a default value if source is empty.

FirstOrDefaultsource是空的時, 方法不會提供方法來指定要傳回的預設值。The FirstOrDefault method does not provide a way to specify the default value to return if source is empty. 如果您想要指定以外的預設值default(TSource), 請DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource)使用方法, 如範例一節中所述。If you want to specify a default value other than default(TSource), use the DefaultIfEmpty<TSource>(IQueryable<TSource>, TSource) method as described in the Example section.

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

傳回序列中符合指定之條件的第一個項目;如果找不到這類項目,則傳回預設值。Returns the first element of a sequence that satisfies a specified condition or a default value if no such element is found.

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);
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

類型參數

TSource

source 項目的類型。The type of the elements of source.

參數

source
IQueryable<TSource>

傳回項目的 IQueryable<T>An IQueryable<T> to return an element from.

predicate
Expression<Func<TSource,Boolean>>

用來測試每個項目是否符合條件的函式。A function to test each element for a condition.

傳回

TSource TSource TSource TSource

如果 source 是空的,或是沒有任何項目通過 predicate 所指定的測試,則為 default(TSource);否則為 source 中通過 predicate 指定之測試的第一個項目。default(TSource) if source is empty or if no element passes the test specified by predicate; otherwise, the first element in source that passes the test specified by predicate.

例外狀況

sourcepredicatenullsource or predicate is null.

範例

下列程式碼範例示範如何藉由FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>)傳入述詞來使用。The following code example demonstrates how to use FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) by passing in a predicate. 在第二個查詢中, 序列中沒有符合條件的元素。In the second query, there is no element in the sequence that satisfies the condition.

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.

備註

這個方法至少有一個類型Expression<TDelegate>的參數, 其類型引數是其中一個Func<T,TResult>類型。This method has at least one parameter of type Expression<TDelegate> whose type argument is one of the Func<T,TResult> types. 針對這些參數, 您可以傳入 lambda 運算式, 它會編譯成Expression<TDelegate>For these parameters, you can pass in a lambda expression and it will be compiled to an Expression<TDelegate>.

方法會產生, 其代表以FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>)結構化泛型方法的方式呼叫本身。 MethodCallExpression FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>)The FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) method generates a MethodCallExpression that represents calling FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) itself as a constructed generic method. 然後, 它會MethodCallExpression將傳遞Execute<TResult>(Expression)至由Provider source參數IQueryProvider的屬性所表示之的方法。It then passes the MethodCallExpression to the Execute<TResult>(Expression) method of the IQueryProvider represented by the Provider property of the source parameter.

因執行代表呼叫FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>)之運算式樹狀架構而產生的查詢行為, 取決於source參數類型的實作為。The query behavior that occurs as a result of executing an expression tree that represents calling FirstOrDefault<TSource>(IQueryable<TSource>, Expression<Func<TSource,Boolean>>) depends on the implementation of the type of the source parameter. 預期的行為是, 它會傳回中source符合predicate條件的第一個專案, 如果沒有專案符合條件, 則傳回預設值。The expected behavior is that it returns the first element in source that satisfies the condition in predicate, or a default value if no element satisfies the condition.

適用於