2011-11-25 51 views
5

我不知道是否有可能得到這個工作:極簡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(); 

它的工作原理,直到有該產品此時它不引發更多圖片...

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

我做了一個修復它,但我寧願保持儘可能最小,留在Linq,所以希望有一種方法來讓我的初始聲明的功能。

醜陋的解決辦法:

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(); 

回答

10

試試這個:

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

完美的作品。謝謝你這麼多dtb。 – Oppdal