2010-02-24 34 views
5

Tôi có 1 đến nhiều mối quan hệ với các bảng sau - Người và Email. Khi sử dụng LINQ to SQL và ASP.Net MVC, tôi muốn hiển thị email đầu tiên hoặc một chuỗi rỗng trong Person xem sử dụng mã như thế này:Trả về chuỗi rỗng bằng cách sử dụng LINQ to SQL - Bảng liên quan không có hàng - ASP.Net MVC

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

Trong trường hợp không có hàng email , Tôi nhận được một NullReferenceException. Tôi có thể trả về giá trị an toàn null từ SQL bằng cách sử dụng một khung nhìn hoặc sproc, nhưng tôi muốn chỉ gắn với linq chung cho các đối tượng sql bị ràng buộc với các bảng.

Trả lời

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

Cảm ơn bạn rất nhiều, đó là hoàn hảo! – jlnorsworthy

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

Sẽ làm việc, chứ không phải siêu sạch để đọc mặc dù.

+0

Cảm ơn câu trả lời của bạn, ở trên gần như giống nhau nhưng chỉ ngắn hơn một chút – jlnorsworthy

+0

Điều này tốt hơn so với những người khác. nguyên nhân Chọn phương pháp là looping trên tất cả các email và nó không tốt lựa chọn cho hiệu suất. – cem

1

tôi bỏ phiếu cho:

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

Tôi nghĩ rằng bạn có thể làm điều đó tất cả các bên trong FirstOrDefault, nhưng tôi đã sai-o! Tuy nhiên, tôi cũng quên rằng khi bạn sử dụng DefaultIfEmpty bạn chỉ có thể gọi First().

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

Tất nhiên, thay ZZZ chỉ với "" (không string.Empty, đó là không cần thiết), nhưng nó là tốt đẹp để xem những hồ sơ, nơi mặc định đã được chọn explicity khi bạn lần đầu tiên được viết nó.

+0

Tiền thưởng là nó hoạt động trong vb.net quá! –

Các vấn đề liên quan