Получить значение FieldExpression в C# ⇐ C#
-
Гость
Получить значение FieldExpression в C#
Я новичок в выражениях на C# и пытаюсь создать преобразователь из Expression в предложение SQL Where. Мне удалось это сделать, когда предоставленное выражение выглядит так
Expression predicate = p => p.Price > 100 && p.Category == "Электроника" && p.PriceTotal >= 200; В приведенном выше примере я могу разбить выражение на выражение-член и константное выражение и создать эквивалентное предложение SQL Where. Теперь я пытаюсь сделать то же самое -
public void GetWhereCluase(string CategoryName) { Предикат Expression = p => p.Category == CategoryName && p.PriceTotal >= 200; GetClause (предикат); } Но на этот раз правая часть — это FieldExpression, и я не знаю, как получить фактическое значение.
Я пытался скомпилировать Func, но безуспешно.
Я новичок в выражениях на C# и пытаюсь создать преобразователь из Expression в предложение SQL Where. Мне удалось это сделать, когда предоставленное выражение выглядит так
Expression predicate = p => p.Price > 100 && p.Category == "Электроника" && p.PriceTotal >= 200; В приведенном выше примере я могу разбить выражение на выражение-член и константное выражение и создать эквивалентное предложение SQL Where. Теперь я пытаюсь сделать то же самое -
public void GetWhereCluase(string CategoryName) { Предикат Expression = p => p.Category == CategoryName && p.PriceTotal >= 200; GetClause (предикат); } Но на этот раз правая часть — это FieldExpression, и я не знаю, как получить фактическое значение.
Я пытался скомпилировать Func, но безуспешно.
-
Гость
Re: Получить значение FieldExpression в C#
if (expr is MemberExpression mexp && mexp.Expression is ConstantExpression mce)
{
if (mexp.Member is FieldInfo fi)
res = fi.GetValue(mce.Value);
if (mexp.Member is PropertyInfo pi)
res = pi.GetValue(mce.Value);
}
if (expr is ConstantExpression ce && ce.Value != null)
res = ce.Value;
{
if (mexp.Member is FieldInfo fi)
res = fi.GetValue(mce.Value);
if (mexp.Member is PropertyInfo pi)
res = pi.GetValue(mce.Value);
}
if (expr is ConstantExpression ce && ce.Value != null)
res = ce.Value;