Click here to Skip to main content
16,016,882 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
I am having some difficulty with creating a class and passing decimal, date, boolean and even some integer values to the class from my Domain Service in a Visual Studio 2010 C# Silverlight application. There are several articles on this subject on the net but they are currently above my knowledge of C# and WCF and I cannot find a single example that passes anything other than a string or an integer. For the most part I have that working but some of my integer values require a suffix of .Value and some do not. I am not sure why.

The class I am trying to create and use is defined as:

Class to be populated

C#
public class pmEmployee
    {
        [Key]
        public int id { get; set; }
        [DataMember]
        public string member_num { get; set; }
        public string last_name { get; set; }
        public string first_name { get; set; }
        public string middle_name_or_initial { get; set; }
        public string address1  {get; set; }
        public string address2 { get; set; }
        public string city { get; set; }
        public string state { get; set; }
        public string zip { get; set; }
        public DateTime birth_date { get; set; }
        public DateTime hire_date { get; set; }
        public string home_phone { get; set; }
        public string cell_phone { get; set; }
        public string work_phone_and_extension { get; set; }
        public string work_phone_extension { get; set; }
        public string SSN { get; set; }
        public string clock_num { get; set; }
        public int local_id { get; set; }
        public int site_id { get; set; }        
        public string email_address { get; set; }
        public int member_status_id { get; set; }
        public int member_type_id { get; set; }
        public int member_job_title_id { get; set; }      
        public string Marital  { get; set; }
        public string sex { get; set; }
        public string notes { get; set; }
        public int race_type_id  { get; set; }
        public string urnumber { get; set; }
        public string bad_address_ind { get; set; }
        public int dues_rate_id { get; set; }
        public decimal cope_contribution { get; set; }
        public bool grievance_exists_ind { get; set; }
        public decimal overage_amt {get; set; }
    }



The Domain Service Iqueryable I am hacking away at is:

C#
public IQueryable GetEmployee(int EMPID)
   {
     return from emp in ObjectContext.tblEmployees
       where emp.id == EMPID 
       select new pmEmployee()
      {
        id = emp.id,
        member_num = emp.member_num == null ? null :  emp.member_num,
        last_name = emp.last_name == null ? null : emp.last_name,
        first_name = emp.first_name == null ? null : emp.first_name,
        middle_name_or_initial  = emp.middle_name_or_initial == null ?  null : emp.middle_name_or_initial,

       address1 = emp.address1 == null ? null : emp.address1,
       address2 = emp.address2 == null ? null : emp.address2,
       city = emp.city == null ? null : emp.city,
       state = emp.state == null ? null : emp.state,
       zip = emp.zip == null ? null : emp.zip,
       cell_phone = emp.cell_phone == null ? null : emp.cell_phone,
       local_id = emp.local_id.Value,
       home_phone = emp.home_phone == null ? null : emp.home_phone,
       work_phone_and_extension = emp.work_phone_and_extension == null ? null : emp.work_phone_and_extension,

      work_phone_extension = emp.work_phone_extension  == null ? null : emp.work_phone_extension,

      SSN = emp.SSN == null ? null :  emp.SSN,
      clock_num = emp.clock_num == null ? null : emp.clock_num,                      
      site_id = emp.site_id.Value,
      email_address = emp.email_address == null ? null : emp.email_address,                      
      member_status_id = emp.member_status_id.Value,
      member_type_id = emp.member_type_id.Value,
  //  member_job_title_id =  emp.member_job_title_id.Value,  
      Marital = emp.Marital  == null ? null : emp.Marital,
      sex = emp.sex  == null ? null : emp.sex,
      notes = emp.notes == null ? null : emp.notes,
//Bad race_type_id  = emp.race_type_id.Value,
      urnumber = emp.urnumber  == null ? null : emp.urnumber,
      bad_address_ind = emp.bad_address_ind  == null ? null : emp.bad_address_ind,

//    birth_date = (DateTime) emp.birth_date.Value,
//   overage_amt = (Decimal) emp.overage_amt
//      dues_rate_id = emp.dues_rate_id.Value,
                     
                       
                   };
                   }


I am not sure why some of the integers which are commented out cause problems but when I add them bound to a grid the system goes off to never never land. I have tried putting (int) in front of the integer calues and that does not seem to help. The date birth_date works when there is data but I get an implict null exception when the field in the db is null. I have no idea what to do with decimals or booleans. For instance if I hold the mouse over overage_amt which is a decimal value in the original table I get the message:

Cannot implicitly convert type 'decimal?' to decimal. An explicit conversion exists (are you missing a cast)?

Please don't point me to microsoft articles on WCF I have read them all and do not understand them I am looking for help with my variables. I am really looking for someone to tell me how to handle nulls and pass the data from the domain service to the controls on the xaml without bombing out in VS2010. many thanks in advance.

Thanks,

Larry

[Modified: added pre tags]
Posted
Updated 20-Apr-10 11:43am
v5
Comments
goplappu 29-Dec-11 6:15am    
how to solve these kind of error
Cannot implicitly convert type 'decimal?' to decimal. An explicit conversion exists (are you missing a cast)?

how to solve these kind of error Cannot implicitly convert type 'decimal?' to decimal. An explicit conversion exists (are you missing a cast)?
 
Share this answer
 
FYI, the assignment works for strings because they can be assigned null values. Decimal, int, and so on cannot be assigned null unless you make them nullable.
 
Share this answer
 
I fond that code in an example somewhere on handling nulls. Obviously I misunderstood.

However setting member_num = emp.Member_num works fine for strings. However not for dates, decimals or integers.
 
Share this answer
 
Hi Larry,

To solve this you can write the following code:

overage_amt = emp.overage_amt == null ? 0 : emp.overage_amt;
dues_rate_id = emp.dues_rate_id == null ? null : emp.dues_rate_id.Value;


Also, you can use nullable datatypes which can handle the null value. Have a look into the first answer. That will solve your problem in that case.

DateTime? dateTime = null;
dateTime = new DateTime();
dateTime = null;

In the above code, it will never through any error. Wish you all the best. Happy Coding. Cheers... :thumbsup:
 
Share this answer
 
Hi Larry,

First of all, before reading your next part of the code & problem statement I will ask you one question. What is the need of the below code and the similar kind of code lines?

C#
member_num = emp.member_num == null ? null :  emp.member_num,



There is no need to check null & if it is null set null else the value? What is the significant part of it? This will increase more processing time for checking it as null. Also it will call the setter method to set the value.

Just do the following and that will be enough:

C#
member_num = emp.member_num;


If it is null, will set as null else the value. Hope this information will help you in future while writing code. If this helps you, please "Mark As Answer".
 
Share this answer
 
Seems like you sometimes want null values. When you get null values is likely when things bomb out. Use nullable types to handle this (e.g., "decimal?" instead of "decimal"). Normally, built-in types and struct types cannot be assigned a value of null. However, if you put a question mark after the type, that makes it a nullable value type, which means you can assign null to it. You can use the HasValue property of a nullable type instance to determine if it is null or not, and the Value property of a nullable type instance to get the value (when it is not null). If you try to get the value when it is null, that will throw an exception.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900