Eins-zu-Eins-Assoziierung und Filterung in Linq
-
19-09-2019 - |
Frage
Sagen wir, ich habe zwei Tabellen (Address
und Phone
) in SQL, die eine Eins-zu-Eins-Beziehung haben. Ich habe entsprechend LINQ to SQL-Klassen erstellt und die Zuordnung zu OneToOne
Ich möchte beide Objekte abzurufen, indem Objekt Kind Filterung. z Ich habe die folgende Abfrage, die gut funktioniert:
var n = db.Addresses.Where(t => t.Phone.Number == 100);
Gibt es eine Möglichkeit, die folgende Arbeit machen kann:
var n = db.Addresses.Where(t => t.Phone == new Phone(100));
Die Phone
Klassenkonstruktors oben initialisiert die Number
Eigenschaft. Als ich die Abfrage sehen kann, dass eine Klausel ausgegeben wird, enthält die Telefon Tabelle von ID (Primärschlüssel), aber die Anzahl Klausel nicht enthalten.
Wenn ich Number
als Primärschlüssel in Visual Studio eingestellt dann ist es in der where-Klausel enthalten, aber die Suche zurückkehrt immer noch nichts als der Parameterwert für id ist 0. Auch wenn es funktioniert es nicht eine Lösung wie Number
ist sollte kein Primärschlüssel sein.
Lösung
Was Sie fragen nicht ganz sinnvoll. Wenn Sie das Telefon-Element die Adresse angegeben möchten, müssen Sie dies, indem Sie die Address.Phone Eigenschaft zugreifen.
Sie können keine Art und Verwendung initialisieren, das zu Projekt, da dies DLINQ, wo die Abfrage übersetzt wird an die DB nach unten. Sie können dies auf Objekte auf Linq tun, aber es würde Sie zwingen, Ihre Liste aufzuzählen, die alle Datenbankinformationen in den Speicher holen würde, die für die Leistung nicht gut sein kann ...
Ich sehe das Problem hier nicht? Sie haben die Adresse, eine Arbeitssuche, und Sie können das Telefon Eigenschaft zugreifen, indem Sie die Eigenschaft Adresse erreichbar.