开发者

LINQAnonymous class, property set to null

开发者 https://www.devze.com 2023-02-15 06:27 出处:网络
I have a problem with returning a nullable double and int from a property in a anonymous class in LINQ. My select statement goes here:

I have a problem with returning a nullable double and int from a property in a anonymous class in LINQ. My select statement goes here:


return from workS in db.vWorkstations
         join custF1 in db.CustomFields.Where(x => x.CustomFieldID == cuField[0].ID) 
         on intAreaNumber equals custF1.Area into tmpCust1
       from custF1 in tmpCust1.DefaultIfEmpty()
         join custFV1 in db.CustomFieldValues 
         on new DummyClass{P1 = workS.WorkstationID, P2 = custF1.CustomFieldID} 
           equals new DummyClass
                  {
                     P1 = custFV1.WorkstationID.HasValue ? custFV1.WorkstationID.Value : -1 
                     , P2 = custFV1.CustomFieldID
                  } into tmpCustFV1
       from custFV1 in tmpCustFV1.DefaultIfEmpty()
       select new 
              { 
                 WorkstationID = workS.WorkstationID
                 , CallName = workS.CallName
                 , CustomFieldString1 = (cuField[0].TypeID == 1) ? custFV1.FieldValue : "" 
                 , CustomFieldSelection1 = (cuField[0].TypeID == 2) ? custFV1.FieldValue : "" 
                 , CustomFieldNumber1 = (custFV1.FieldVa开发者_如何学运维lue != null && cuField[0].TypeID == 3) ? new Nullable(int.Parse(custFV1.FieldValue)) : (int?)null
                 , CustomFieldAmount1 = (custFV1.FieldValue != null && cuField[0].TypeID == 4) ? new Nullable(Double.Parse(custFV1.FieldValue)) : new Nullable()
                 , CustomFieldDateTime1 = (custFV1.FieldValue != null && cuField[0].TypeID == 5) ? new Nullable(DateTime.ParseExact(custFV1.FieldValue,"yyyyMMdd",provider)) : new Nullable() 
              };

It compiles, but does not run. The problem is with the lines

 ,CustomFieldNumber1 = (custFV1.FieldValue != null && cuField[0].TypeID == 3) 
     ? new Nullable<int>(int.Parse(custFV1.FieldValue))
     : (int?)null

 ,CustomFieldAmount1 = (custFV1.FieldValue != null && cuField[0].TypeID == 4) 
     ? new Nullable<Double>(Double.Parse(custFV1.FieldValue))
     : new Nullable<Double>()

As you can see, i tried two different approaches of returning a null value, none of them work. If i remove the parsing, and just return a string, it works. Unfortunately, this is not a option for me.

The query fails with the error:

base {System.SystemException} = {"The argument 'value' was the wrong type. Expected 'System.Nullable1[System.Double]'. Actual 'System.Nullable1[System.Int32]'."}

What could be wrong? Thanks in advance


Shouldn't you return just null here -

 ,CustomFieldNumber1 = (custFV1.FieldValue != null && cuField[0].TypeID == 3) 
         ? new Nullable<int>(int.Parse(custFV1.FieldValue))
         : null


Yeah, i saw that with the Nullable(). I ended up making a workaround. Made a function in the database that would either return the original value as a decimal or null, if it was told to. Works, but may not be that pretty.

,CustomFieldAmount1 =  db.fn_ConvertVarcharToDecimal(custFV1.FieldValue,(custFV1.FieldValue != null && cuField[0].TypeID != 4) ) 
0

精彩评论

暂无评论...
验证码 换一张
取 消