5 Stimmen

Das Mitglied hat keine unterstützte Übersetzung in SQL. Beim Versuch, in der LINQ to SQL-Anweisung auf eine Eigenschaft in meiner Partial-Klasse zuzugreifen. Lambda-Ausdruck?

Ich habe 3 Tabellen in meiner Datenbank

  • Land
  • Stadt
  • Haus

Der Ländertisch sieht wie folgt aus

 CountryID
 Name    

Die Stadttabelle sieht wie folgt aus

 CountryID
 CityID
 Name

Haus

 CountryID
 CityID
 HouseID
 Name

Ich verwende LINQ to SQL und die oben genannten Tabellen werden zu Klassen und haben ihre Eigenschaften usw.

Jetzt habe ich meine eigene abstrakte Klasse namens

Standort

Und erstellte Partial Classes für Land, Stadt, Haus, die von der abstrakten Klasse Location erben

und können daher eine gemeinsame Funktionalität wie FindByID() und Eigenschaften wie .Parent (vom Typ Location)

Nehmen wir nun .Parent die im Grunde genommen den Parent für jede Klasse zurückgibt

also

Haus wird zurückkehren

 .Parent  //as City

Die Stadt wird zurückkehren

 .Parent  //as Country

Land wird zurückkehren

 .Parent  //as Country

Wenn Sie nun versuchen, die

City.Parent in einer LINQ to SQL-Anweisung erhalte ich eine

 The member 'Location`1[City].Parent' has no supported translation to SQL.

Jetzt haben die Leute erwähnt, wie Sie Lambda-Ausdrücke verwenden können, um dieses Problem zu lösen. Kann mir jemand ein gutes Beispiel für diese Art von Situation geben

Wie sollte .Parent aussehen?

 Location Parent
 {
    get
   {
        //Please fill Lambda expression here
   }
 }

0 Stimmen

Können Sie ein vollständigeres Beispiel für eine L2S-Abfrage mit .Parent bereitstellen, die Sie versuchen?

2voto

Marc Gravell Punkte 970173

Ihr .Parent Eigenschaft wird in LINQ-to-Objects in Ordnung sein, aber wie die Nachricht besagt, wird es haben kein Anhaltspunkt was damit zu tun ist, wenn es TSQL erstellen muss. Es kann nicht durch Ihren C#-Code (IL zu der Zeit) lesen, um die Bedeutung abzuleiten. Bestenfalls gibt es mayo etwas sein, das man mit einer Funktion machen kann, die ein Expression in irgendeiner Form, aber es wird keinen Spaß machen, damit zu arbeiten.

Wenn Sie mit dem ORM interagieren, können Sie im Grunde nur über Dinge sprechen, die er bereits kennt. Sie könnten möglicherweise eine UDF auf den Datenkontext abbilden und diese verwenden, aber auch das ist nicht schön.

Zur Arbeit mit Expression müssen Sie Folgendes verwenden Expression.Invoke und selbstgesteuerte Lambdas (wenn sie kombiniert werden, um interessante Dinge zu tun, wie sie mit einem erwarteten Wert zu vergleichen); es realmente wird nicht nett sein. Ich könnte wahrscheinlich ein Beispiel zusammenstellen, aber ehrlich gesagt denke ich, dass Ihr DAL/Repository diese zusätzlichen Eigenschaften einfach nicht verwenden sollte, sondern sich stattdessen auf die Verwendung der ORM-Eigenschaften beschränken sollte. Auch wenn es ein wenig DRY verstößt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X