Linq Rückkehr einzelner integer-Wert basierend auf string in SQL gespeichert

Ich bin ganz neu bei Linq,

Ich versuche nur zu tun, eine routine zurück, die in der Regel in SQL und kann nicht scheinen, um eine klare Antwort aus betrachten viele Foren mit Stunden surfen.

Ok, ich habe eine Tabelle Kunden mit zwei Spalten CustomerID und CustomerName, die gehören zu einer CustomersDataBase

Habe ich erfolgreich zurückkehren können einzelne Zeichenfolge aus einem integer-Abfrage mit der folgenden Methode (in seiner Grundform):

public string getCustomerName(int custID)
{
    CustomerDataBase cdb = new CustomerDataBase();

    string custName = (
        from c in cdb.Customers
        where c.CustomerID == custID
        select c.CustomerName)
        .SingleOrDefault();

    return custName;
}

Ok das ist in Ordnung, aber wenn ich versuchen, Sie zu invertieren Sie die situation mit dem Versuch, die Rückkehr der CustomerID es gibt eine Ausnahme: System.InvalidCastException: die Angegebene Umwandlung ist ungültig.

Dies ist mein code:

public int getCustomerID(string custName)
{
    CustomerDataBase cdb = new CustomerDataBase();

    int custID = (
        from c in cdb.Customers
        where c.CustomerName == custName
        select c.CustomerID)
        .SingleOrDefault();

    return custID;
}

Ich habe auch versucht denken-SQL-Bedingungen, um die custName string ein char-array:

public int getCustomerID(string custName)
{ 
    CustomerDataBase cdb = new CustomerDataBase();

    int custID = (
        from c in cdb.Customers
        where c.CustomerName == "'"+custName+"'"
        select c.CustomerID)
        .SingleOrDefault();

    return custID;
}

Ausnahme verschwindet aber nur scheinbar wieder eine "0" für das Feld " CustomerID, obwohl ich Hunderte von Einträgen.

So, in SQL würde ich einfach folgende:

Select CustomerID 
from   Customers 
where  CustomerName="'"+custName+"'"

Jede Hilfe wäre sehr geschätzt werden! Dank

//Änderungen an code, damit es funktioniert (folgende Antwort von Jon Skeet):-

Ok, Das funktioniert:

[Table(Name = "TableCustomers")]
public class Kunden
{

    [Column(IsPrimaryKey = true, IsDbGenerated = true)]
    public long CustomerID { get; set; }
    [Column]
    public string CustomerName { get; set; }
    [Column]

}
//für entgegenkommend für BigInt, SQL-Datenbank

öffentlichkeit lange getCustomerID(string custName)
{

        CustomerDatabase cdb = new CustomerDatabase();



           long custID = (from c in cdb.Customers

                          where c.CustomerName == custName
                          select c.CustomerID).SingleOrDefault();

        return custID;
    }
}
  • Die letzten Abfrage keine Datensätze, die OrDefault (Teil) zurück int-0. Das ist, warum Sie nicht bekommen, eine cast exception. Was ist der Typ von "CustomerId" in deinem code?
  • [Column(IsPrimaryKey = true, IsDbGenerated = true)] public int CustomerID { get; set; } Kunden-ID ist ungleich null und "BigInt" in der SQL-Datenbank als Primary Key
  • Format verwende ich: [Table(Name = "TableCustomers")] public class Kunden { [Column(IsPrimaryKey = true, IsDbGenerated = true)] public int CustomerID { get; set; } [Column] public string CustomerName { get; set; }}
  • Code funktioniert nicht gut in Kommentare. Sie sind berechtigt, zur Bearbeitung Ihrer Frage, um weitere Informationen hinzuzufügen.
InformationsquelleAutor amundell | 2012-01-20
Schreibe einen Kommentar