2010-02-24 3 views
5

Ich habe 1 zu viele Beziehung mit den folgenden Tabellen - Person und E-Mail. Wenn LINQ to SQL und ASP.Net MVC, würde Ich mag die erste E-Mail oder eine leere Zeichenfolge in meinem Person Ansicht mit Code wie folgt zeigen:Geben Sie leere Zeichenfolge mit Linq zu SQL - Verwandte Tabelle ohne Zeilen - ASP.Net MVC

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

In Fällen, in denen es keine E-Mail-Zeilen Ich erhalte eine NullReferenceException. Ich kann null sichere Werte von SQL zurückgeben, indem ich eine Ansicht oder einen Sproc benutze, aber ich möchte nur mit generischem linq zu den sql Gegenständen bleiben, die an Tabellen gebunden werden.

Antwort

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

Vielen Dank, das ist perfekt! – jlnorsworthy

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

Würde, nicht super sauber arbeiten, obwohl zu lesen. für

+0

Vielen Dank für Ihre Antwort, das oben genannte ist fast das gleiche, aber nur ein bisschen prägnanter – jlnorsworthy

+0

Dies ist besser als andere. Weil Select-Methoden alle E-Mails durchlaufen und es nicht gut für die Leistung ist. – cem

1

Meine Stimme:

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

Ich dachte, dass du das alles in der FirstOrDefault tun konnte, aber ich war falsch-o! Ich habe aber auch vergessen, dass Sie mit DefaultIfEmpty einfach First() aufrufen können.

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

Natürlich ersetzen ZZZ mit nur „“ (nicht String.Empty, dass nicht erforderlich ist), aber es ist schön, die Datensätze zu sehen, wo der Standard explicity wird gewählt, wenn Sie es zuerst zu schreiben sind.

+0

Bonus ist es funktioniert auch in vb.net! –

Verwandte Themen