jlnorsworthy
jlnorsworthy

Reputation: 3974

Return empty string using Linq to SQL - Related table with no rows - ASP.Net MVC

I have 1 to many relationship with the following tables - Person and Email. When using linq to sql and ASP.Net MVC, I'd like to show the first email or an empty string in my Person view using code like this:

<%= Html.Encode(Model.Emails.FirstOrDefault().EmailAddress) %>

In cases where there are no email rows, I receive a NullReferenceException. I can return null safe values from SQL by using a view or sproc, but I'd like to just stick with generic linq to sql objects bound to tables.

Upvotes: 5

Views: 1976

Answers (3)

Andrew
Andrew

Reputation: 8674

My vote for:

Model.Emails.Select(z => z.EmailAddress).DefaultIfEmpty("zzz").FirstOrDefault();

I thought that you could do it all inside the FirstOrDefault, but I was wrong-o! However, I also forgot that when you use DefaultIfEmpty you can just call First().

Model.Emails.Select(z => z.EmailAddress).DefaultIfEmpty("zzz").First();

Of course, replace ZZZ with just "" (not string.empty, that is unnecessary), but it is nice to see those records where the default is being chosen explicity when you are first writing it.

Upvotes: 1

Quintin Robinson
Quintin Robinson

Reputation: 82345

<%= Html.Encode((Model.Emails.FirstOrDefault() ?? new Email { EmailAddress = string.Empty }).EmailAddress) %>  

Would work, not super clean to read though.

Upvotes: 1

Mark Byers
Mark Byers

Reputation: 838416

Model.Emails.Select(x => x.EmailAddress).FirstOrDefault() ?? string.Empty

Upvotes: 8

Related Questions