I want to quickly select some rows, format it nicely for a dropdownlist/selectlist or something like that - but I have a field in the db, that is nullable (DateOfBirth).
var athletes = (from at in _db.Athletes
select new{
Name = at.Name + " " + at.DateOfBirth,
Id = at.AthleteId
}).ToList();
Is there a way to handle nullable types inside the LINQ in a case like this?
Edit:
I was not paying attention to the fact, that since this is using entity framework, methods that work with standard LINQ cannot be used unless they have a SQL translation.
in conclusion no, it won't return null since null can't say sequence contains no elements it will always say object reference not set to an instance of an object ;) Save this answer. Show activity on this post.
LINQ to SQL does not impose C# null or Visual Basic nothing comparison semantics on SQL. Comparison operators are syntactically translated to their SQL equivalents. The semantics reflect SQL semantics as defined by server or connection settings.
SingleOrDefault() will return null (or default of the type) if nothing exists but will throw exception if you have more than one match.
You can use the null coalesce operator, see Equivalent of SQL ISNULL in LINQ?.
Something like:
var athletes = (from at in _db.Athletes
select new{
Name = at.Name + " " + (at.DateOfBirth ?? ""),
Id = at.AthleteId
}).ToList();
Often a nullable can be handled using variable ?? default
var res = nullableVariable ?? defaultValue;
But be carefull with datetime, linq will try to implement this in SQL and DateTime.MinValue from C# is not within the valid range for SQL and will give you an error message.
Since you are just doing string appending try this.
var athletes = (from at in _db.Athletes
select new{
Name = at.Name + " " + (at.DateOfBirth ?? string.Empty),
Id = at.AthleteId
}).ToList();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With