Poniżej znajduje się przykładowy kod:
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();
}
}
nie jestem w stanie zrozumieć, co robię źle. Wciąż otrzymuję komunikat „Nie można utworzyć stałej wartości typu„ System.Object ”. W tym kontekście obsługiwane są tylko typy pierwotne (takie jak Int32, String i Guid).”
==
i.Equals()
: stackoverflow.com/questions/814878/ ...Miałem ten sam problem z wartością nullable int. Użycie == zamiast tego działa dobrze, ale jeśli chcesz użyć .Equals, możesz porównać to z wartością zmiennej dopuszczającej wartość null, więc
where t.CustID.Value.Equals(custIdToQuery)
źródło
Miałem ten sam problem, gdy próbowałem zrobić .Równa się z zerową liczbą dziesiętną. Użycie == zamiast tego działa dobrze. Wydaje mi się, że dzieje się tak, ponieważ nie próbuje dopasować dokładnego „typu” dziesiętnego? dziesiętnie.
źródło
IQueryable
, więc nie jest kompilowane do zwykłego kodu C #. Staje się wyrażeniem przekazywanym do dostawcy zapytań. Ten dostawca zapytań może robić z zapytaniem, co chce, i może obsługiwaćEquals
i==
to samo lub nie..Equal()
, aby porównaćInt32?
zInt32
. PonieważInt32?
ma zawieraćInt32
inull
, pomyślałem, że zadziała. Ale tak się nie stało.==
pracował.Miałem ten sam problem i porównywałem obiekt kolekcji
"User"
z typem danych całkowitoliczbowych"userid"
(x.User.Equals(userid)
)from user in myshop.UserPermissions.Where(x => x.IsDeleted == false && x.User.Equals(userid))
a poprawne zapytanie to
x.UserId.Equals(userid)
from user in myshop.UserPermissions.Where(x => x.IsDeleted == false && x.UserId.Equals(userid))
źródło
W moim przypadku zmieniłem bezpośrednie wywołanie
(sender as Button).Text
na połączenie pośrednie przy użyciu temp var, zadziałało. kod roboczy:private void onTopAccBtnClick(object sender, EventArgs e) { var name = (sender as Button).Text; accountBindingSource.Position = accountBindingSource.IndexOf(_dataService.Db.Accounts.First(ac => ac.AccountName == name)); accountBindingSource_CurrentChanged(sender, e); }
kod błędu:
private void onTopAccBtnClick(object sender, EventArgs e) { accountBindingSource.Position = accountBindingSource.IndexOf(_dataService.Db.Accounts.First(ac => ac.AccountName == (sender as Button).Text)); accountBindingSource_CurrentChanged(sender, e); }
źródło