Genereller Aufbau
Um die Performance zu erhöhen wird in Lookupfeldern nicht nur die ID des Fremdelements gespeichert, sondern auch der Inhalt des anzuzeigenden Feldes (z.B. Titel). Beide Werte werden mit dem Standardtrennzeichen ;# getrennt. Das Lookupfeld enthält also beispielsweise bei einem ausgewählten Wert:
12;#Mein Titel
wobei die 12 die ID des Elements in der Nachschlageliste ist und "Mein Titel" der Inhalt im anzuzeigenden Feld.
Ist nichts ausgewählt, enthält das Feld nichts, also null. Hier ist Vorsicht geboten, bevor man beispielsweise die ToString()-Methode aufruft, denn dies schlägt natürlich fehl, wenn das Feld keinen Wert enthält, es sollte vorher auf != null geprüft werden.
Lookup-Listen mit vielen Elementen
Wenn Ihr Lookup-Felder verwendet, deren Quelllisten viele Elemente haben (>25 schätze ich im Moment), dann verändert sich in der Oberfläche die Auswahllistbox. Statt einer normalen DropDownList wird ein Custom Control angezeigt, in das die Elementtitel auch eingegeben werden können.
Das ist schön und gut, allerdings verhält sich dieses Control etwas anders als die DropDownList. Wurde in der DropDownList "(None)" ausgewählt, also kein Listenelement referenziert, enthielt das Lookup-Feld als Wert null, also gar nichts. Wurde etwas ausgewählt, ist der Inhalt, wie oben beschrieben.
Wird nun dieses Custom Control angezeigt enthält das Feld aber nicht mehr null, wenn nichts ausgewählt wurde, sondern "0;#". Dies kann in der Programmierung für Fehlverhalten sorgen, wenn man lediglich auf null-Values überprüft.