In my previous post Single vs SingleOrDefault, we talk about Single and SingleOrDefault method and difference between these methods. In this post we are going to explore two more extension methods First and FirstOrDefault.
You can find some other useful topics and posts here. Below is a chart explaining about First() and FirstOrDefault(). You can easily differentiate these methods from this chart. I have also given examples of each method.
First()
DataClasses1DataContext dc = new DataClasses1DataContext();
FirstOrDefault()
DataClasses1DataContext dc = new DataClasses1DataContext();
Note- To use First() and FirstOrDefault(), consider the order of record to get the required result. For example, query
var result = dc.UserInfos.FirstOrDefault(x => x.FName == "Rahul");
will give you different result in compare to below query.
var result = dc.UserInfos.OrderBy(x => x. LName).FirstOrDefault(x => x.FName == "Rahul");
I hope this will be helpful for you. I would like to have any feedback from you. Your valuable feedback, question, or comments about this article are always welcome
You can find some other useful topics and posts here. Below is a chart explaining about First() and FirstOrDefault(). You can easily differentiate these methods from this chart. I have also given examples of each method.
Description | When thrown Exception | When to Use | |
---|---|---|---|
First() | Returns first element of a sequence. | There is no element in the result or source is null. | If more than one element is expected and you want only first element. |
FirstOrDefault() | Returns first element of a sequence, or a default value if no element is found. | Only if the source is null | If more than one element is expected and you want only first element. Also good if result is empty. |
Examples
We have an UserInfo table, which have some records as shown below.
We will use thee above table to querying for First() and FirstOrDefault(). Here I have used LINQ to SQL.
First()
DataClasses1DataContext dc = new DataClasses1DataContext();
Statement | Expected Result | Actual Result |
---|---|---|
var result = dc.UserInfos.First(x => x.ID == 1); | There is only one record where ID== 1. Should return this record | ID: 1 First Name: Manish Last Name: Dubey Email: xyz@xyz.com |
var result = dc.UserInfos.First(x => x.FName == "Rahul"); | There are multiple records where FName == "Rahul". First record should be return. | ID: 7 First Name: Rahul Last Name: Sharma Email: xyz1@xyz.com |
var result = dc.UserInfos.First(x => x.ID ==13); | There is no record with ID== 13. An error should be occur. | InvalidOperationException: Sequence contains no elements |
FirstOrDefault()
DataClasses1DataContext dc = new DataClasses1DataContext();
Statement | Expected Result | Actual Result |
---|---|---|
var result = dc.UserInfos.FirstOrDefault(x => x.ID == 1); | There is only one record where ID== 1. Should return this record | ID: 1 First Name: Manish Last Name: Dubey Email: xyz@xyz.com |
var result = dc.UserInfos.FirstOrDefault(x => x.FName == "Rahul"); | There are multiple records where FName == "Rahul". First record should be return. | ID: 7 First Name: Rahul Last Name: Sharma Email: xyz1@xyz.com |
var result = dc.UserInfos.FirstOrDefault(x => x.ID ==13); | There is no record with ID== 13. An error should be occur. | null |
Note- To use First() and FirstOrDefault(), consider the order of record to get the required result. For example, query
var result = dc.UserInfos.FirstOrDefault(x => x.FName == "Rahul");
will give you different result in compare to below query.
var result = dc.UserInfos.OrderBy(x => x. LName).FirstOrDefault(x => x.FName == "Rahul");
I hope this will be helpful for you. I would like to have any feedback from you. Your valuable feedback, question, or comments about this article are always welcome
ID 7 for Rahul Sharma should be returned instead of ID 10 Rahul Kumar
ReplyDelete