C # bis F # - EF-Code zuerst

8

Ich habe eine Eins-zu-viele-Beziehung zwischen Dealer , die viele Cars haben kann.

Ich versuche, meinen C # -Code, der für EF verwendet wird, in F # umzuwandeln ... Das Problem ist nur, dass es in meinem F # -Code einen Händler bekommen kann, aber es ist nicht für diesen Händler ... es gibt nur null zurück , aber in der C # -Version funktioniert es?

Mein Code:

Die C # -Version

%Vor%

... Program.cs, die nach Händler und seinen Autos fragen:

%Vor%

Die F # -Version

%Vor%

... Die Funktion ToLinq:

%Vor%

... Und Program.fs, die den Händler und seine Autos bekommen:

%Vor%

Jede Hilfe ist willkommen!

    
ebb 24.03.2011, 18:31
quelle

3 Antworten

5

Ändern

%Vor%

bis

%Vor%

und

%Vor%

bis

%Vor%     
newcommer 25.03.2011, 04:47
quelle
1

Um zu überprüfen, ob der LINQ-Ausdruck das Problem ist, könnten Sie versuchen, einen solchen Ausdruck manuell zu erstellen. Der folgende F # -Code versucht, den Code nachzuahmen, den Sie mit Reflector oder ILSpy im C # -Code sehen können:

%Vor%     
wmeyer 25.03.2011 00:14
quelle
0

Ich denke, das Problem könnte mit Ihrer Funktion F # ToLinq sein. Es sieht so aus, als ob Sie nur eine anonyme Funktion von F # in ein MethodCallExpression umwandeln und der Ausdrucksbaum sich so verhält, als sollte er Ihre Funktion aufrufen. Das ist nicht dasselbe wie ein "realer" Ausdrucksbaum mit einem MemberAccessExpression oder was auch immer es von der C # -Seite sein mag.

Ich denke, EF möchte den Ausdrucksbaum semantischer gestalten, damit er den tatsächlichen Eigenschaftenzugriff entdecken kann, anstatt einen einfachen "falschen" Methodenaufruf, den Sie hier machen.

Mein Rat wäre, Reflector auf den zwei kompilierten Assemblys zu öffnen und zu sehen, wo der Unterschied in den Expression-Bäumen liegt. Dann machen Sie den F # -Code den gleichen Typ von Ausdrucksbaum.

Haftungsausschluss: Ich bin nicht sehr versiert in F #, aber ich wäre gerne :). Das sieht cool aus!

    
James Dunne 24.03.2011 20:07
quelle