Linq Query continua jogando “Não é possível criar um valor constante do tipo System.Object…”, por quê?

O seguinte é o exemplo de código:

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(); } } 

Eu sou incapaz de entender o que estou fazendo errado. Eu continuo recebendo “Não é possível criar um valor constante do tipo ‘System.Object’. Somente tipos primitivos (‘como Int32, String e Guid’) são suportados neste contexto.”

Use == em vez de Equals:

 where t.CustID == custIdToQuery 

Se os tipos estão incorretos você pode achar que isso não compila.

Eu tive o mesmo problema com um int anulável. O uso de == funciona bem, mas se você quiser usar .Equals, você pode compará-lo com o valor da variável anulável, então

 where t.CustID.Value.Equals(custIdToQuery) 

Eu tive o mesmo problema quando eu estava tentando fazer .Equals com um decimal anulável. Usando = = em vez disso funciona muito bem. Eu acho que isso é porque não está tentando combinar o “tipo” exato de decimal? para decimal.

Eu estava enfrentando o mesmo problema e eu estava comparando o object de coleção "User" com o tipo de dados inteiro "userid" ( x.User.Equals(userid) )

 from user in myshop.UserPermissions.Where(x => x.IsDeleted == false && x.User.Equals(userid)) 

e a consulta correta é x.UserId.Equals(userid)

 from user in myshop.UserPermissions.Where(x => x.IsDeleted == false && x.UserId.Equals(userid))