This works fine in SQl server
from p__0 in Finding
select new
{
Overdue = p__0.FindingID == p__0.FindingID
? AQD.Helpers.OverdueType.Overdue
: AQD.Helpers.OverdueType.None
}
but in Oracle it gives
The value passed in must be an enum base or an underlying type for an enum, such as an Int32.Parameter name: value
at System.Enum.ToObject(Type enumType, Object value)
at lambda_method(Closure , ProjectionRow , Int32[] )
at SD.LLBLGen.Pro.LinqSupportClasses.DataProjectorToObjectList`1.<>c__DisplayClass4_0.<.ctor>b__0(Object[] r, Int32[] i)
at SD.LLBLGen.Pro.LinqSupportClasses.DataProjectorToObjectList`1.AddRowToResults(Object[] rawProjectionResult)
at SD.LLBLGen.Pro.ORMSupportClasses.ProjectionUtils.FetchProjectionFromReader(List`1 valueProjectors, IGeneralDataProjector projector, IDataReader dataSource, Int32 rowsToSkip, Int32 rowsToTake, Boolean clientSideLimitation, Boolean clientSideDistinctFiltering, Boolean clientSidePaging, Boolean performValueProjectionsOnRawRow, Boolean postProcessDBNullValues, Dictionary`2 typeConvertersToRun, IRetrievalQuery queryExecuted)
at SD.LLBLGen.Pro.ORMSupportClasses.DataAccessAdapterCore.FetchProjection(List`1 valueProjectors, IGeneralDataProjector projector, IRetrievalQuery queryToExecute, Boolean performValueProjectionsOnRawRow, Boolean postProcessDBNullValues, Dictionary`2 typeConvertersToRun)
at SD.LLBLGen.Pro.ORMSupportClasses.DataAccessAdapterCore.FetchProjection(List`1 valueProjectors, IGeneralDataProjector projector, QueryParameters parameters)
at SD.LLBLGen.Pro.ORMSupportClasses.DataAccessAdapterBase.<>c__DisplayClass22_0.<FetchProjection>b__0()
at SD.LLBLGen.Pro.LinqSupportClasses.LLBLGenProProvider2.ExecuteValueListProjection(QueryExpression toExecute)
at SD.LLBLGen.Pro.LinqSupportClasses.LLBLGenProProviderBase.ExecuteExpression(Expression handledExpression, Type typeForPostProcessing)
at SD.LLBLGen.Pro.LinqSupportClasses.LLBLGenProProviderBase.System.Linq.IQueryProvider.Execute(Expression expression)
at SD.LLBLGen.Pro.LinqSupportClasses.LLBLGenProQuery`1.System.Collections.IEnumerable.GetEnumerator()
Workaround is to do
from p__0 in Finding
select new
{
Overdue = (AQD.Helpers.OverdueType)(p__0.FindingID == p__0.FindingID
? (int)AQD.Helpers.OverdueType.Overdue
: (int)AQD.Helpers.OverdueType.None)
}
SQL is
SELECT CASE WHEN CASE WHEN ( "LPLA_1"."FINDING_ID" = "LPLA_1"."FINDING_ID") THEN 1 ELSE 0 END=1 THEN 3 ELSE 0 END AS "Overdue"
FROM
"AQD"."QAOC_FINDING" "LPLA_1"
Enum is
public enum OverdueType
{
//Due in 15+ days
[Display(ResourceType = typeof(RiskLabels), Name="Label_Overdue_None")]
None = 0,
//Due in 8-14 days
[Display(ResourceType = typeof(RiskLabels), Name="Label_Overdue_WarnOne")]
DueInTwoWeeks = 1,
//Due within 7 days
[Display(ResourceType = typeof(RiskLabels), Name="Label_Overdue_WarnTwo")]
DueInOneWeek = 2,
[Display(ResourceType = typeof(RiskLabels), Name="Label_Overdue_Overdue")]
Overdue = 3,
}
version="5.5.2-hotfix-20190225"