I used stored procedure.Although it matches the field types in sql it gives such an error.
System.InvalidOperationException: 'The cast to value type 'System.Double' failed because the materialized value is null. Either the result type's generic parameter or the query must use a nullable type.'
C# code
var data = UoW.Context.Database.SqlQuery<NewDeclarationItemReport>("exec GetDeclarationItemReportData @StartDate,@EndDate,@IsWorkOrder,@ReceiverId,@DeclarationId,@DeclarationItemId,@VoyageId,@WarehouseId,@OperationType,@PortId,@MaterialId",
new SqlParameter { ParameterName = "@StartDate", Value = dto.StartDate,DbType = System.Data.DbType.DateTime2 },
new SqlParameter { ParameterName = "@EndDate", Value = dto.EndDate, DbType = System.Data.DbType.DateTime2 },
new SqlParameter { ParameterName = "@IsWorkOrder", Value = dto.IsWorkOrder==false ? 0 : 1, DbType = System.Data.DbType.Int32 },
new SqlParameter { ParameterName = "@ReceiverId", Value = dto.ReceiverId != Guid.Empty ? dto.ReceiverId : (object)DBNull.Value, IsNullable = true, DbType = System.Data.DbType.Guid },
new SqlParameter { ParameterName = "@DeclarationId", Value = dto.DeclarationId != Guid.Empty ? dto.DeclarationId : (object)DBNull.Value, IsNullable = true, DbType = System.Data.DbType.Guid },
new SqlParameter { ParameterName = "@DeclarationItemId", Value = dto.DeclarationItemId != Guid.Empty ? dto.DeclarationItemId : (object)DBNull.Value, IsNullable = true, DbType = System.Data.DbType.Guid },
new SqlParameter { ParameterName = "@VoyageId", Value = dto.VoyageId != Guid.Empty ? dto.VoyageId : (object)DBNull.Value, IsNullable = true, DbType = System.Data.DbType.Guid },
new SqlParameter { ParameterName = "@WarehouseId", Value = dto.WarehouseId != Guid.Empty ? dto.WarehouseId : (object)DBNull.Value, IsNullable = true, DbType = System.Data.DbType.Guid },
new SqlParameter { ParameterName = "@OperationType", Value = dto.OperationType==4 ? 4 : 5, DbType = System.Data.DbType.Int32 },
new SqlParameter { ParameterName = "@PortId", Value = ActivePort, DbType = System.Data.DbType.Guid },
new SqlParameter { ParameterName = "@MaterialId", Value = dto.MaterialId != Guid.Empty ? dto.MaterialId : (object)DBNull.Value, IsNullable = true, DbType = System.Data.DbType.Guid }
).ToList<NewDeclarationItemReport>();
SQL
ALTER PROCEDURE [dbo].[GetDeclarationItemReportData]
(
@StartDate datetime2,
@EndDate datetime2,
@IsWorkOrder int,
@ReceiverId uniqueidentifier,
@DeclarationId uniqueidentifier,
@DeclarationItemId uniqueidentifier,
@VoyageId uniqueidentifier,
@WarehouseId uniqueidentifier,
@OperationType int,
@PortId uniqueidentifier,
@MaterialId uniqueidentifier
)