Das folgende ist das Codebeispiel:
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();
}
}
Ich kann nicht verstehen, was ich falsch mache. Ich erhalte immer wieder die Meldung "Es kann kein konstanter Wert vom Typ 'System.Object' erstellt werden. In diesem Zusammenhang werden nur primitive Typen ('wie Int32, String und Guid') unterstützt."
==
und zu erklären.Equals()
: stackoverflow.com/questions/814878/…Ich hatte das gleiche Problem mit einem nullable int. Die Verwendung von == funktioniert stattdessen gut, aber wenn Sie .Equals verwenden möchten, können Sie es mit dem Wert der nullbaren Variablen vergleichen
quelle
Ich hatte das gleiche Problem, als ich versuchte. Gleichungen mit einer nullbaren Dezimalstelle. Die Verwendung von == funktioniert stattdessen gut. Ich denke, das liegt daran, dass nicht versucht wird, den genauen "Typ" der Dezimalstelle zu finden. zu dezimal.
quelle
IQueryable
, sodass es nicht in regulären C # -Code kompiliert wird. Es wird zu einem Ausdruck, der an einen Abfrageanbieter übergeben wird. Diese Abfrage - Provider können tun , was mit der Abfrage will, und es kann behandelnEquals
und==
die gleiche oder nicht..Equal()
zu vergleichenInt32?
mitInt32
. DaInt32?
enthalten sollteInt32
undnull
, dachte ich , es würde funktionieren. Aber es war nicht so.==
hat funktioniert.Ich hatte das gleiche Problem und verglich das Sammlungsobjekt
"User"
mit dem ganzzahligen Datentyp"userid"
(x.User.Equals(userid)
)und richtige Abfrage ist
x.UserId.Equals(userid)
quelle
In meinem Fall habe ich den direkten Aufruf von
(sender as Button).Text
in einen indirekten Aufruf mit einer temporären Variable geändert , hat funktioniert. Arbeitscode:Buggy-Code:
quelle