I'm working with Entity Framework 6 in MVC 5.
I have the following method:
[HttpPost]
public ActionResult UpdateDetails(ApplicationUser applicationUser)
{
var context = new ApplicationDbContext();
var user = context.Users.Select(x => x.UserName == applicationUser.UserName).FirstOrDefault();
//etc etc
}
Users is an IDbSet<ApplicationUser>
.
Why am I getting a bool back from the Select method?
My expectation would be to get an ApplicationUser
object back. Why isn't this the case?
Thanks
Select()
projects an element of a sequence. Since x.UserName == applicationUser.UserName
returns a bool
, the result of the method will be a boolean.
What you want requires the Where
method. This filters the sequence based on the specified predicate:
var user = context.Users.Where(x => x.UserName == applicationUser.UserName).FirstOrDefault();
Which can be shortened to:
var user = context.Users.FirstOrDefault(x => x.UserName == applicationUser.UserName);
This is possible, since this overload of FirstOrDefault()
takes a filter predicate as second parameter.
Select
literally selects something inside the arguments. So, if you have an expression that returns a bool
, Select
will return bool
.