Here is a cut down version of my linq query;
var list = from inv in db.Inventories
where inv.InventoryCode.StartsWith("005")
select
new
{
inv.InventoryCode,
inv.InventoryMedias.Where(im => im.MediaType == 0).FirstOrDefault().Synopsis,
inv.InventoryMedias.Where(im => im.MediaType == 0).FirstOrDefault().InventoryID
};
…because an inventory record does not have to have any rows in InventoryMedia, i have added the .FirstOrDefault(), which then returns a null and linq is smart enough not to throw an ONSTIOO error, but i do get this error.
The cast to value type ‘Int32’ failed
because the materialized value is
null. Either the result type’s generic
parameter or the query must use a
nullable type
Now i understand that i could just change the anonymous type to a class and define this integer as a nullable type, but i dont want to do that. I have also tried using the if null command “?? 0”, but that is not supported on reference types like int. I know i can use .DefaultIfEmpty() and set a default value for the anonymous type, but how can i set a default value for the integer or is there another alternative?
Try projecting to the desired properties first then use
FirstOrDefault(). That way you won’t have to deal with the possibility of a null reference exception and the type will be whatever is appropriate for the property. Cast to nullable if necessary.