LINQ-Ausdruck gibt keinen Wert zurück
-
Montag, 24. September 2012 16:05
Hallo,
ich will prüfen, ob eine Name (LastName) bereits in der Tabelle enthalten ist.
Ablauf:
User gibt den Namen (und andere Angaben) ein. Die daraus gebildete DataRow (dataRow) mit dem Feld LastName prüfe ich mit der DataTable vor dem Speichern.
Leider funktioniert der LINQ-Ausdruck nicht, d.h. items enthält nie einen Wert trotz Eingabe eines bereits vorhandenen Namens.
var items = from a in dataTable.AsEnumerable() where dataRow["LastName"].ToString().Contains(a.Field<string>("LastName")) select a;Was ist daran falsch?
Alexander
Alle Antworten
-
Montag, 24. September 2012 17:19Beantworter
Hallo Alexander,
um den Fehler zu finden:
Weise mal dataRow["LastName"] einer String-Variable zu - was hier sowieso effizienter ist, weil der Ausdruck damit nur einmalig ausgewertet werden muss. Sollte da nichts drinstehen, so könnte das daran liegen, dass die von Dir zugewiesenen Werte zu dem Zeitpunkt noch um den Proposed Wert handelt.
Als (ungetesteter) Vorschlag:
// eine Methode würde es kürzer machen ;-) string lastName = (!dataRow.IsNull("LastName")) ? (string)dataRow["LastName" /*, DataRowVersion.Proposed */] : String.Empty; var items = from a in dataTable.AsEnumerable() where !a.IsNull("LastName") && a.Field<string>("LastName").Contains(lastName) select a; // und getroffen? Console.WriteLine("Found: " + items.Count());Der IsNull-Test kann entfallen, wenn in der Spalte keine Nullwerte zugelassen sind.
Wenn Dich die Datenzeilen gar nicht interessieren, sondern nur ob ein Treffer existiert, wäre Any effizienter:
bool anyLastName = dataTable.AsEnumerable().Any(r => r.Field<string>("LastName").Contains(lastName));(ggf. auch IsNull prüfen wie oben).
Gruß Elmar
- Als Antwort markiert AlexanderRi Dienstag, 25. September 2012 06:45
-
Dienstag, 25. September 2012 06:46
Hallo Elmar,
vielen Dank. Das hat mir sehr geholfen; besonders der zweite Vorschlag.
Alexander

