5
votes

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.

  • DateOfBirth is a Nullable < DateTime >
  • Source is Entity Framework 4
4
... " + (at.DateOfBirth as string ?? string.empty ),asawyer
Is that linq to SQL, Entity Framework, or just plain LINQ?Brian Mains

4 Answers

7
votes

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();
2
votes

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.

2
votes

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();
0
votes

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