Я работаю над переводчиком LINQ to SQL.Он должен переводить запросы LINQ в SQL.Я сосредоточен на создании ГДЕ части запроса.Я перебираю дерево выражений LINQ, и затем я сталкиваюсь с проблемой, которую я не могу получить к значению фактического параметра, переданного методу, содержащему вызов LINQ.
ПРИМЕЧАНИЕ. Я не использую LINQ to SQL,ни Entity Framework, ни NHibernate, потому что я просто не могу, так как в игре присутствует система VB6 Legacy.
Так что я пытаюсь добиться, чтобы вызвать где-то на высоком уровне это:
int? parameterForCall = cmb.SelectedValue;
Тогда у меня есть метод, подобный этому, и он находится в ExpenseDAL
классе, который вызывает BaseDAL<Expense>.GetAll(X)
:
public IList<Expense> GetAll(int? parameterForCall)
{
IList<Expense> expenses = BaseDAL<Expense>.GetAll(t => t.Fixed ==
parameterForCall);
}
GetAll
метод имеет такую подпись:
public static IList<T> GetAll(Expression<Func<T, bool>> predicate = null);
Затем я вызываю GetCondition
метод, который преобразует выражение в SQL:
private static string GetCondition(Expression predicate = null);
Это рекурсивная функция.В нем я попадаю в ситуацию, в которой мне нужно получить параметр, который я передал выражению GetAll
с именем parameterForCall
.
Проблема в том, что я могу написать это:
dynamic value = (predicate as ConstantExpression);
И в ImmediateWindow я вижу это значение. Значение записывается так:
{FMC.Proxy.Common.BaseDAL.}
parameterForCall: 19
Но я не могу добраться до значения 19. И я хочу, чтобы я мог преобразовать его в значение, чтобы положитьв строку SQL.
Кто-нибудь знает, как получить значение 19, чтобы я мог использовать его в коде?