El siguiente es el ejemplo 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();
}
}
No puedo entender qué estoy haciendo mal. Sigo recibiendo "No se puede crear un valor constante de tipo 'System.Object'. Solo los tipos primitivos ('como Int32, String y Guid') son compatibles en este contexto".
==
y.Equals()
: stackoverflow.com/questions/814878/…Tuve el mismo problema con un int que acepta valores NULL. Usar == en su lugar funciona bien, pero si desea usar .Equals, puede compararlo con el valor de la variable anulable, por lo que
fuente
Tuve el mismo problema cuando intentaba hacer .Equals con un decimal anulable. Usar == en su lugar funciona bien. Supongo que esto se debe a que no está tratando de coincidir con el "tipo" exacto de decimal. a decimal.
fuente
IQueryable
, por lo que no está compilado en el código C # normal. Se convierte en una expresión que se pasa a un proveedor de consultas. Eso proveedor de consulta se puede hacer lo que quiera con la consulta, y puede manejarEquals
y==
el mismo o no..Equal()
compararInt32?
conInt32
. Dado queInt32?
se supone que contieneInt32
ynull
, pensé que funcionaría. Pero no fue así.==
trabajó.Me enfrenté al mismo problema y estaba comparando el objeto de colección
"User"
con el tipo de datos entero"userid"
(x.User.Equals(userid)
)y la consulta correcta es
x.UserId.Equals(userid)
fuente
En mi caso, cambié la llamada directa de
(sender as Button).Text
a llamada indirecta usando una var temporal, funcionó. código de trabajo:código buggy:
fuente