LINQ Expressions Body ToString

dapper lambda linq regex string

Pregunta

Me pregunto si alguien puede explicarme la desventaja de recuperar

(Expression<Func<T, bool>>) Expression.Body

en tiempo de ejecución y operando en esto como una cadena?

por ejemplo dado el siguiente

public partial class Tests : Form
{
    public Tests()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        TestClass t = new TestClass();
        textBox1.Text = t.Evaluate(templates => templates.usable == true && templates.name == "tc1");
    }       
}

public class TestClass
{
    public string name { get; set; }
    public bool usable { get; set; }
}

public static class Helpers
{
    public static string Evaluate<T>(this T input,Expression<Func<T, bool>> Expression) where T : class
    {

        return Expression.Parameters.Single().Name + " " + Expression.Body;

    }
}

que devuelve

templates ((templates.usable == True) AndAlso (templates.name == "tc1"))

Me pregunto qué tipo de problemas de rendimiento pueden surgir al recuperar esto y luego analizarlo a través de una expresión Regex

en respuesta a la pregunta ¿por qué? He estado jugando un poco con Dapper, pero ninguna de las extensiones existentes (que he visto) me atraen

Me gustaría poder operarlo de manera similar a EF, por ejemplo

_repo.Select(templates=>templates.usable== true && templates.id == templateId);

Respuesta popular

Gracias por el empujón hacia el uso de la expresión real en lugar de analizar el texto. para cualquiera que esté interesado, he publicado un enlace al primer borrador de mi proyecto de sqlexpression. Código de Google - SqlExpression.cs

Los parámetros que se crean son DynamicParameters de Dapper, pero podrían intercambiarse fácilmente por un parámetro sql estándar.

no han hecho muchas pruebas todavía, pero la consulta parece funcionar razonablemente bien en esta etapa



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow