2010-02-24 32 views
5

我與以下表格有一對多關係 - Person和Email。當使用LINQ to SQL和ASP.Net MVC,我想顯示在我的視圖中使用代碼的第一個電子郵件或一個空字符串是這樣的:返回空字符串使用Linq to SQL - 沒有行的相關表 - ASP.Net MVC

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

在有沒有電子郵件行的情況下,我收到一個NullReferenceException。我可以通過使用視圖或存儲過程從SQL返回null安全值,但是我想只使用泛型linq綁定到綁定到表的sql對象。

回答

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

非常感謝你,這是完美的! – jlnorsworthy

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

會的工作,不是超級乾淨,雖然讀取。

+0

感謝您的回答,以上幾乎相同,但只是更簡潔 – jlnorsworthy

+0

這比其他人更好。因爲Select方法在所有電子郵件上循環播放,並且其性能不佳。 – cem

1

我的投票:

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

我認爲你可以做到這一切的FirstOrDefault裏面,但我錯了,噢!但是,我也忘記了當你使用DefaultIfEmpty時,你可以調用First()。

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

當然,只有「」替換ZZZ(不是的String.Empty,這是不必要的),但它很高興看到默認被顯式地選擇,當你第一次寫它的記錄。

+0

獎金也是在vb.net工作! –