it-swarm.com.de

Linq Query wirft weiterhin "Konnte keinen konstanten Wert vom Typ System.Object ... erstellen"

Folgendes 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 bekomme immer "Konnte keinen konstanten Wert vom Typ 'System.Object' erstellen. Nur primitive Typen ('wie Int32, String und Guid') werden in diesem Kontext unterstützt."

82
Neel

Verwenden Sie == statt Equals:

where t.CustID == custIdToQuery

Wenn die Typen falsch sind, stellen Sie möglicherweise fest, dass dies nicht kompiliert wird.

205
Mark Byers

Ich hatte das gleiche Problem mit einem nullable int. Stattdessen funktioniert die Verwendung von == gut. Wenn Sie jedoch .Equals verwenden möchten, können Sie es mit dem Wert der nullfähigen Variablen vergleichen

where t.CustID.Value.Equals(custIdToQuery)
26
kloarubeek

Ich hatte das gleiche Problem, als ich versuchte, .Equals mit einer nullstellbaren Dezimalzahl auszuführen. Stattdessen funktioniert == gut. Ich denke, das ist, weil es nicht versucht, den genauen "Typ" der Dezimalzahl zu finden? zu dezimal.

8
Dave Stuart

Ich war mit demselben Problem konfrontiert und verglich das Collection Object "User" mit dem Datentyp "userid" (x.User.Equals(userid))

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

und korrekte Abfrage ist x.UserId.Equals(userid)

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