Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Linq Query keeps throwing "Unable to create a constant value of type System.Object....", Why?

The following is the code sample:

private void loadCustomer(int custIdToQuery)      {         var dbContext = new SampleDB();         try         {             var customerContext = from t in dbContext.tblCustomers      // keeps throwing:                                    where t.CustID.Equals(custIdToQuery) // Unable to create a constant value of type 'System.Object'.                                     select new                           // Only primitive types ('such as Int32, String, and Guid')                                     {                                    // are supported in this context.                                        branchId = t.CustomerBranchID,   //                                        branchName = t.BranchName        //                                    };                                   //              if (customerContext.ToList().Count() < 1) //Already Tried customerContext.Any()             {                 lstbCustomers.DataSource = customerContext;                 lstbCustomers.DisplayMember = "branchName";                 lstbCustomers.ValueMember = "branchId";             }             else             {                 lstbCustomers.Items.Add("There are no branches defined for the selected customer.");                 lstbCustomers.Refresh();             }         }         catch (Exception ex)         {             MessageBox.Show(ex.Message);         }         finally         {             dbContext.Dispose();         }     } 

i am unable to understand what am i doing wrong. I keep getting "Unable to create a constant value of type 'System.Object'. Only primitive types ('such as Int32, String, and Guid') are supported in this context."

like image 337
Neel Avatar asked Jan 04 '11 10:01

Neel


2 Answers

Use == instead of Equals:

where t.CustID == custIdToQuery 

If the types are incorrect you may find that this doesn't compile.

like image 157
Mark Byers Avatar answered Sep 21 '22 16:09

Mark Byers


I had the same issue with a nullable int. Using == instead works nicely, but if you want to use .Equals, you can compare it to the value of the nullable variable, so

where t.CustID.Value.Equals(custIdToQuery) 
like image 34
kloarubeek Avatar answered Sep 21 '22 16:09

kloarubeek