2010-02-24 10 views
5

Mam 1 do wielu relacji z następującymi tabelami - Osoba i e-mail. Przy użyciu LINQ do SQL i ASP.NET MVC, chciałbym pokazać pierwsze e-mail lub pusty ciąg w moim Osoba Pokaż przy użyciu kodu tak:Powrót pusty ciąg przy użyciu Linq do SQL - Powiązana tabela bez wierszy - ASP.Net MVC

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

w przypadkach, gdy nie ma żadnych wierszy e-mail , Otrzymuję wyjątek NullReferenceException. Mogę zwrócić wartości bezpieczne null z SQL za pomocą widoku lub sproc, ale chciałbym po prostu trzymać się ogólnego linq do sql obiektów związanych z tabelami.

Odpowiedz

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

Dziękuję bardzo, to jest idealne! – jlnorsworthy

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

będzie działać, nie super czyste czytać chociaż.

+0

Dzięki za odpowiedź, powyższe jest prawie takie samo, ale po prostu nieco bardziej zwięzłe – jlnorsworthy

+0

To jest lepsze niż inne. ponieważ opcja Wybierz metody zapętla się we wszystkich wiadomościach e-mail i nie jest dobra do wyboru. – cem

1

Mój głos dla:

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

Myślałem, że można zrobić to wszystko wewnątrz FirstOrDefault, ale myliłem-o! Jednak zapomniałem również, że kiedy używasz DefaultIfEmpty, możesz po prostu zadzwonić do First().

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

Oczywiście, należy wymienić tylko z „ZZZ” (nie string.empty, że nie jest konieczne), ale miło jest zobaczyć te rekordy którym domyślny jest wybierany explicity po raz pierwszy pisania.

+0

Bonus działa w witrynie vb.net! –

Powiązane problemy