使用Linq to SQL返回空字符串 - 相关表无行 - ASP.Net MVC

5

我与以下表 - Person和Email有1对多的关系。当使用linq to sql和ASP.Net MVC时,我希望在我的Person视图中显示第一个电子邮件或空字符串,可以使用以下代码:

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

如果没有电子邮件行,我会收到NullReferenceException异常。我可以通过使用视图或存储过程从SQL返回空安全值,但我想坚持使用绑定到表格的通用Linq to SQL对象。

3个回答

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

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

这样做是可行的,但不太易读。


谢谢你的回答,上面的内容几乎相同,只是更加简练。 - jlnorsworthy
这比其他方法更好。因为选择方法会循环遍历所有电子邮件,这对性能不利。 - 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,那是不必要的),但在你首次编写时明确选择默认值时,能看到这些记录是很好的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接