Voici l'exemple de code:
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();
}
}
je suis incapable de comprendre ce que je fais de mal. Je continue à recevoir "Impossible de créer une valeur constante de type" System.Object ". Seuls les types primitifs (" tels que Int32, String et Guid ") sont pris en charge dans ce contexte."
==
et.Equals()
: stackoverflow.com/questions/814878/…J'ai eu le même problème avec un int nullable. Utiliser == à la place fonctionne bien, mais si vous souhaitez utiliser .Equals, vous pouvez le comparer à la valeur de la variable Nullable, donc
la source
J'ai eu le même problème lorsque j'essayais de faire .Equals avec une décimale nullable. L'utilisation de == fonctionne plutôt bien. Je suppose que c'est parce qu'il n'essaie pas de faire correspondre le "type" exact de décimal? en décimal.
la source
IQueryable
, donc il n'est pas compilé dans du code C # normal. Il devient une expression qui est transmise à un fournisseur de requêtes. Ce fournisseur de requête peut faire tout ce que veut avec la requête, et il peut gérerEquals
et==
même ou non..Equal()
de comparerInt32?
avecInt32
. DepuisInt32?
est censé contenirInt32
etnull
, j'ai pensé que cela fonctionnerait. Mais ça n'a pas été le cas.==
travaillé.J'ai été confronté au même problème et je comparais l'objet de collection
"User"
avec le type de données entier"userid"
(x.User.Equals(userid)
)et la requête correcte est
x.UserId.Equals(userid)
la source
Dans mon cas, j'ai changé l'appel direct de
(sender as Button).Text
en appel indirect en utilisant une variable temporaire, cela a fonctionné. code de travail:code buggy:
la source