versucht, eine Methode im where eines linq-Statements aufzurufen

8

Unten ist der Code, den ich benutze, aber er antwortet mit

  

Methode 'Boolean isUser (System.String)' hat keine unterstützte Übersetzung in SQL.

Irgendwelche Hilfe? Übrigens verwende ich linq to SQL Datenquelle

%Vor%

Ich habe eine Lösung gefunden, um das Ergebnis der ersten Abfrage als Objekte abzufragen, aber das ist gut so, weil ich meine Daten zweimal durchlasse.

der aktualisierte Code, der am Ende funktioniert hat, nachdem jemand wie von Anders Abel empfohlen verwendet hat

%Vor%     
Shehab Fawzy 11.01.2012, 09:10
quelle

5 Antworten

6

Linq-to-sql übersetzt die Abfrage in SQL. Es kann nur eine begrenzte Menge eingebauter Funktionen übersetzen. Sie müssen Ihre Abfrage so umschreiben, dass sie keine eigene Funktion enthält.

Eine vollständige Liste der von linq-to-sql unterstützten Funktionen und Operatoren finden Sie unter MSDN .

Sie können SqlMethods.Like() verwenden, um zu prüfen, ob das Feld nur Ziffern enthält. Siehe T-SQL IsNumeric () und Linq-to-SQL für ein Beispiel.

    
Anders Abel 11.01.2012, 09:13
quelle
3

Das Problem besteht darin, dass Sie nur Dinge verwenden können, die in der Datenbank funktionieren, da die Abfrage in der Datenbank ausgeführt werden muss. Der C # -Code in Ihrer isUser -Methode kann nicht in der Datenbank ausgeführt werden .

Sie müssen es neu schreiben, ohne diese Funktion zu benutzen. Vielleicht haben Sie eine Tabelle, die Benutzer nach IDs auflistet, denen Sie beitreten können?

    
George Duckett 11.01.2012 09:13
quelle
0

Wäre einfacher für Sie, wenn Sie ID für Sie validieren möchten, zum Beispiel where ID > 0 , Ergebnisse wiederherstellen und nach der resultierenden Sammlung den gewünschten hypothetischen Filter mit

ausführen %Vor%

Ursache, ich vermute, es führt irgendwie komplexere Validierung durch.

Wichtig ist, dass aus DB-Ergebnissen weniger möglich sind, um Datenübertragungslatenz zu vermeiden.

    
Tigran 11.01.2012 09:22
quelle
0

Sie könnten diesen Code aufrufen:

%Vor%

Und ein gültiges Ergebnis erhalten, da jeder linq-Ausdruck über linq to sql auf Employees angewendet werden kann. Dann können Sie emp in eine Liste oder und array casten und die Sammlung mit Ihrer Methode isUser filtern.

    
Totem 11.01.2012 09:31
quelle
0

Alternativ können Sie jede SQL-UDF (benutzerdefinierte Funktion) innerhalb von LINQ-Abfragen wie gp.isUser(x.ID) aufrufen, so dass Sie diese Funktion isUser als SQL-UDF definieren können, etwa wie folgt:

%Vor%

Dann müssen Sie diese UDF in Ihrer .DBML -Datei definieren , die andere Tabellen enthält und Prozeduren Definitionszuordnungen. Dann können Sie In Ihrer LINQ-Abfrage diese Zeile oder jede andere benutzerdefinierte Funktion aufrufen p> %Vor%     

Mahmoud Gamal 11.01.2012 10:41
quelle

Tags und Links