Стюарт,
Я изменил поле «Цена» в базе данных, чтобы не допускать пустых значений, и получил ту же ошибку, что и вы:
"Operator '??' cannot be applied to operands of type 'decimal' and 'int'".
Как вы указали, когда в качестве значения Price установлено недопустимое значение NULL в базе данных, оператор слияния NULL больше не работает, поскольку он ожидает увидеть десятичный тип с пропуском:
decimal?
Если я удаляю оператор слияния null и запускаю контрольный пример, не содержащий цены, я получаю:
"The null value cannot be assigned to a member with type System.Decimal which is a non-nullable value type.."
Вот код, который работает. Ли я привести результат подзапроса к десятичной? перед применением нулевого оператора объединения.
public class Class1
{
DataClasses1DataContext dc = new DataClasses1DataContext();
public decimal test(int stockID)
{
var q = from s in dc.Stocks
where s.StockID == stockID
select new
{
StockID = s.StockID,
memberPrice = ((decimal?)(from mp in dc.StockPrices
where mp.StockID == s.StockID
select mp.Price).FirstOrDefault()) ?? 0
};
return q.FirstOrDefault().memberPrice;
}
}