Метод Crystal Reports 'SetDataSource()
создает DataColumn
, предоставленный списком ProductOrder
, и затем пытается создать DataColumn
экземпляры, имеющие тип NULL, который не поддерживается.
Вы должны либосоздайте класс viewmodel, который имеет свойства с теми же базовыми типами, но без присутствующих обнуляемых типов, затем спроецируйте результат с этим классом в качестве источника данных:
// Viewmodel
public class ProductOrderVM
{
public int OrderID { get; set; }
public DateTime Date { get; set; }
public int SupplierID { get; set; }
public decimal CostPrice { get; set; }
public int Quantity { get; set; }
}
// Controller action
rd.SetDataSource(db.ProductOrder.Select(p => new ProductOrderVM
{
OrderID = p.OrderID,
Date = p.Date.GetValueOrDefault(),
SupplierID = p.SupplierID.GetValueOrDefault(),
CostPrice = p.CostPrice.GetValueOrDefault(),
Quantity = p.Quantity.GetValueOrDefault()
}).ToList());
Или используйте нулевой оператор объединения / троицы для назначения значений по умолчанию в соответствии сих базовый тип, если нулевые свойства имеют нулевое значение:
rd.SetDataSource(db.ProductOrder.Select(p => new
{
OrderID = p.OrderID,
// with ternary operator
Date = p.Date == null ? DateTime.MinValue : p.Date, // or DateTime.Now as default value
// with null-coalescing operator
SupplierID = p.SupplierID ?? 0,
CostPrice = p.CostPrice ?? 0,
Quantity = p.Quantity ?? 0
}).ToList());