A seguir está 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();
}
}
não consigo entender o que estou fazendo de 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."
==
e.Equals()
: stackoverflow.com/questions/814878/…Eu tive o mesmo problema com um int anulável. Usar == em vez disso funciona bem, mas se você quiser usar .Equals, você pode compará-lo ao valor da variável anulável, então
fonte
Eu tive o mesmo problema quando estava tentando fazer .Equals com um decimal anulável. Usar == em vez disso funciona bem. Eu acho que isso é porque ele não está tentando corresponder ao "tipo" exato de decimal? para decimal.
fonte
IQueryable
, portanto, não é compilado em código C # regular. Torna-se uma expressão que é passada para um provedor de consulta. Esse provedor de consulta pode fazer o que quiser com a consulta e pode tratarEquals
e fazer==
o mesmo ou não..Equal()
compararInt32?
comInt32
. Uma vez queInt32?
é suposto conterInt32
enull
, pensei que funcionaria. Mas isso não aconteceu.==
funcionou.Eu estava enfrentando o mesmo problema e estava comparando o objeto de coleção
"User"
com o tipo de dados inteiro"userid"
(x.User.Equals(userid)
)e a consulta correta é
x.UserId.Equals(userid)
fonte
No meu caso, mudei a chamada direta de
(sender as Button).Text
para indireta usando um var temp, funcionou. código de trabalho:código com bugs:
fonte