Jeśli ktokolwiek jest bardzo znany z obszaru nazw Linq.Dynamic, mógłbym skorzystać z pomocy - nie mogłem znaleźć żadnych zasobów w Internecie.Wykonywanie DynamicExpression z nieznanymi typami
Zasadniczo używam DynamicExpression.ParseLambda stworzyć wyrażenie których typ nie jest znany w czasie kompilacji,
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);
}
Jeżeli QueryFilter jest:
public class QueryFilter
{
string propertyName;
ExpressionType operationType;
object value;
}
która reprezentuje prosty binarny działa jak "Wiek> 15" lub coś podobnego.
W ten sposób działa funkcja "GetExpression", pobiera ona dwa typy - jeden, który jest typem wejściowym i taki, który jest typem wyjściowym, i ostatecznie generuje to, co normalnie zostałoby utworzone przez delegata Func. Przyjmuje również ciąg, który reprezentuje zapytanie i obiekt params [] wartości, odpowiednio "expressionString" i "values" powyżej.
Mam jednak problem z wykonywaniem dynamicznego wyrażenia w LINQ-SQL, używając DataContext generowanego z SqlMetal (plik .dbmc).
DatabaseContext db = new DatabaseContext(connectionString);
var filter = DynamicExpressionBuilder.
GetExpression(typeof(SysEventLogT), sysEventFilters)
var query = db.SysEventLogT.Where(filter);
Wytwarza się następujący błąd,
System.Data.Linq.Table<DBReporting.Linq.Data.SysEventLogT>
nie zawiera definicji "Gdzie i najlepsze rozszerzenie metoda przeciążenie
System.Linq.Dynamic.DynamicQueryable.Where<T>(System.Linq.IQueryable<T>, string, params object[])
ma pewne nieprawidłowe argumenty.
Wiem, że moja instancja DataContext faktycznie traktuje tabele sql jako właściwości ... czy muszę się zastanowić, jak GetProperty() w jakiś sposób działa? A może potrzebuję stworzyć kolejne rozszerzenie .Where?