2010-02-24 2 views
5

У меня есть отношение 1 к многим со следующими таблицами - Лицо и электронная почта. При использовании LINQ к SQL и ASP.Net MVC, я хотел бы показать первое письмо или пустая строка в моей Person вид с помощью кода, как это:Возвращает пустую строку с использованием Linq to SQL - Связанная таблица без строк - ASP.Net MVC

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

В тех случаях, когда нет ни одного адреса электронной строки , Я получаю исключение NullReferenceException. Я могу вернуть нулевые безопасные значения из SQL с помощью представления или sproc, но я хотел бы просто использовать общий 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

Это лучше, чем другие. потому что методы выбора являются циклическими для всех электронных писем, и это не подходит для производительности. – 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! –

Смежные вопросы