Linq查询不断抛出“无法创buildtypesSystem.Object的常量值…”,为什么?

以下是代码示例:

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(); } } 

我无法理解我做错了什么。 我一直得到“无法创build一个types为”System.Object“的常量值,只有原始types(如Int32,String和Guid)在这个上下文中被支持。

使用==而不是Equals:

 where t.CustID == custIdToQuery 

如果types不正确,您可能会发现这不能编译。

我有一个可空的int相同的问题。 使用==可以很好地工作,但是如果你想使用.Equals,你可以把它和可以为null的variables的值比较,所以

 where t.CustID.Value.Equals(custIdToQuery) 

当我试图做的时候,我遇到了同样的问题。 使用==而不是很好地工作。 我想这是因为它不是试图匹配十进制的确切“types”? 到十进制。

我遇到了同样的问题,我正在比较集合对象"User"与整数数据types"userid"x.User.Equals(userid)

 from user in myshop.UserPermissions.Where(x => x.IsDeleted == false && x.User.Equals(userid)) 

并正确的查询是x.UserId.Equals(userid)

 from user in myshop.UserPermissions.Where(x => x.IsDeleted == false && x.UserId.Equals(userid))