Wenn jemand mit dem Linq.Dynamic-Namespace sehr vertraut ist, könnte ich etwas Hilfe verwenden - konnte keine im Internet verfügbaren Ressourcen finden.Ausführen von DynamicExpression mit unbekannten Typen
Grundsätzlich ich DynamicExpression.ParseLambda bin mit einem Ausdruck zu schaffen, in dem der Typ nicht zum Zeitpunkt der Kompilierung bekannt ist,
public Expression GetExpression(Type t, List<QueryFilter> filters)
{
// pseudo code
// extracts a string representation of the query as 'expressionString'
return DynamicExpression.ParseLambda(t, typeof(Boolean), expressionString, values);
}
Wo ein Queryfilter ist:
public class QueryFilter
{
string propertyName;
ExpressionType operationType;
object value;
}
, die eine einfache binäre darstellt Funktioniert wie "Alter> 15" oder so.
So funktioniert die 'GetExpression'-Funktion, sie benötigt 2 Typen - einen Eingabe-Typ und einen Ausgabetyp und generiert schließlich, was normalerweise mit einem Func-Delegaten erstellt würde. Es nimmt auch eine Zeichenfolge, die die Abfrage darstellt, und ein params-Objekt [] von Werten, die 'expressionString' bzw. 'values' sind.
Ich habe jedoch Probleme beim Ausführen des dynamischen Ausdrucks in LINQ-to-SQL mit einem DataContext generiert aus SqlMetal (.dbmc-Datei).
DatabaseContext db = new DatabaseContext(connectionString);
var filter = DynamicExpressionBuilder.
GetExpression(typeof(SysEventLogT), sysEventFilters)
var query = db.SysEventLogT.Where(filter);
erzeugt den folgenden Fehler,
System.Data.Linq.Table<DBReporting.Linq.Data.SysEventLogT>
keine Definition für 'Wo' enthalten und die beste Erweiterung -Methodenüberladung
System.Linq.Dynamic.DynamicQueryable.Where<T>(System.Linq.IQueryable<T>, string, params object[])
einige ungültige Argumente hat.
Ich weiß, dass meine DataContext-Instanz tatsächlich die SQL-Tabellen als Eigenschaften behandelt ... muss ich irgendwie mit GetProperty() nachdenken, damit dies funktioniert? Oder vielleicht muss ich eine andere .Where Erweiterung erstellen?