Я хочу регистрировать фактические значения в выражении, а не ссылки на свойства / поля / константы, используемые в выражении. У меня есть скрипка: https://dotnetfiddle.net/7SNxAq код которой (для потомков):
using System;
using System.Linq.Expressions;
public class Program
{
public static void Main()
{
var input = new Foo
{
Shape = "Sphere",
SizeType = SizeType.Small
};
Expression<Func<Foo, bool>> expression = f =>
f.Hue == Constants.Hues.Red &&
f.Shape == input.Shape &&
f.Size == input.SizeType.ToString() &&
!f.IsDeleted;
Console.WriteLine(expression);
}
}
internal class Foo
{
public string Hue { get; set; }
public string Shape { get; set; }
public bool IsDeleted { get; set; }
public string Size { get; set; }
public SizeType SizeType { get; set; }
}
internal enum SizeType
{
Small, Medium, Large
}
internal class Constants
{
public class Hues
{
public static string Red = "#f00";
}
}
Результат Console.WriteLine(expression)
:
f => ((((f.Hue == Hues.Red) AndAlso (f.Shape == value(Program+<>c__DisplayClass0_0).input.Shape)) AndAlso (f.Size == value(Program+<>c__DisplayClass0_0).input.SizeType.ToString())) AndAlso Not(f.IsDeleted))
Но я бы хотел увидеть что-то вроде этого
f => ((((f.Hue == Hues.Red) AndAlso (f.Shape == "Sphere")) AndAlso (f.Size == "Small")) AndAlso Not(f.IsDeleted))
Можно ли это сделать, или мне не хватает смысла выражений?