2010-11-19 10 views
1

Ich möchte EF eine T-SQL-Tabelle-Wert-Funktion zum Filtern von Entitäten verwenden.Filtern von Entitäten nach Serverfunktion in Entity Framework?

Die Funktion gibt Liste der CompanyID so dass EF ein, wo Aussage wie

...WHERE CompanyID IN (SELECT CompanyID FROM dbo.BySearchOptions({0},{1})) 

dass also hinzufügen können später kann ich wie eine Erweiterungsmethode wie

IQueryable<Company> BySearchOptions(this IQueryable<Company, SearchOptions options) 

und Kette mit anderen schaffen

var companies = Entities.Companies. 
    Where(someconde).BySearchOptions(myOptionsObject).OrderBy.Whatever... 

Ist es möglich?

EDIT: Ich weiß, es gibt Entity SQL, so dass Where() -Methode ESQL-Zeichenfolgen und keine Prädikate verwenden kann. Kann Entity SQL verwendet werden, um eine T-SQL-Funktion anzuwenden?

Antwort

0

Sie könnten nach der Funktion filtern, indem Sie die SELECT-Anweisung in einer gespeicherten Prozedur platzieren und dann die gespeicherte Prozedur von EF aufrufen.

Wahrscheinlich nicht die elegante Lösung, die Sie suchen, aber es würde funktionieren.

+0

Danke, aber ich möchte, dass der Filter mit anderen where-Klauseln in Joins, Gruppen usw. verkettet wird. – Evgenyt

1

Die EF unterstützt das Mapping von SQL-Funktionen, aber nicht (in EF 4) Funktionen, die Tabellenwerte zurückgeben.

Eine Alternative besteht darin, ObjectContext.ExecuteStoreQuery zu verwenden und T-SQL zu übergeben.

Aber Sie würden nicht in der Lage sein, die Abfrage weiter zu komponieren, wie Sie fragen.

Eine mögliche Problemumgehung besteht darin, die SQL-Abfrage in eine DB-Serveransicht zu versetzen.

Verwandte Themen