Reputation: 12374
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.
Upvotes: 5
Views: 11212
Reputation: 421
In VB.NET
Dim athletes = (From at In _db.Athletes
Select New With{
.Name = at.Name + " " + If(at.Field(Of Object)("DateOfBirth") = Nothing, string.Empty, at.Field(Of Object)("DateOfBirth")),
.Id = at.AthleteId
}).ToList()
Upvotes: 0
Reputation: 22148
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();
Upvotes: 2
Reputation: 7600
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.
Upvotes: 2
Reputation: 8706
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();
Upvotes: 7