2011-11-25 15 views
5

Tôi tự hỏi nếu nó có thể làm việc này:Minimalist LINQ - System.NullReferenceException

product.PrimaryImage = db.ProductImages 
    .Where(p => p.Product.ID == product.ID) 
    .OrderBy(p => p.Order ?? 999999) 
    .ThenBy(p => p.ID) 
    .FirstOrDefault() 
    .Name; 
db.SaveChanges(); 

Nó hoạt động cho đến khi không có nhiều hình ảnh cho sản phẩm đó lúc này nó ném ...

System.NullReferenceException: Object reference not set to an instance of an object. 

Tôi đã sửa chữa nó nhưng tôi muốn giữ nó càng ít càng tốt và ở lại Linq vì vậy đã hy vọng có một cách để có được tuyên bố ban đầu của tôi hoạt động.

Việc sửa chữa xấu xí:

ProductImages primaryProductImage = db.ProductImages.Where(p => p.Product.ID == product.ID).OrderBy(p => p.Order ?? 999999).ThenBy(p => p.ID).FirstOrDefault(); 
string primaryImage = (primaryProductImage != null) ? primaryProductImage.Name : null; 
product.PrimaryImage = primaryImage; 
db.SaveChanges(); 

Trả lời

10

Hãy thử điều này:

product.PrimaryImage = db.ProductImages 
    .Where(p => p.Product.ID == product.ID) 
    .OrderBy(p => p.Order ?? 999999) 
    .ThenBy(p => p.ID) 
    .Select(p => p.Name) 
    .FirstOrDefault(); 
+0

trình hoàn hảo. Cảm ơn bạn rất nhiều dtb. – Oppdal