Crear una expresión de Linq a SQL bool a partir de una expresión Int

c# expression-trees linq linq-to-sql

Pregunta

En Linq to SQL tengo una expresión que devuelve un int, y quiero hacer una expresión basada en esa expresión que devuelve un booleano. El int se puede usar para OrderBy(score) y el booleano se puede usar para Where(ifScore) . No puedo averiguar cómo usar la puntuación para definir ifScore , y agradecería alguna ayuda.

Expression<Func<Model, int>> score = p =>
            (testList.Count() > 0 && p.Name.Contains(testList.FirstOrDefault()) ? 1 : 0);

Expression<Func<Model, bool>> ifScore = p =>
            //how to say if score > 2

Respuesta aceptada

No estoy seguro de qué tan bien funcionará esto con LINQ to SQL, pero puede usar Expression.GreaterThan para crear la expresión binaria apropiada, y luego solo es cuestión de crear la Expression<TDelegate> correcta Expression<TDelegate> partir de eso.

var body = Expression.GreaterThan(score.Body, Expression.Constant(2));
var ifScore = Expression.Lambda<Func<Model, bool>>(body, score.Parameters);

La expresión final se verá algo como:

p => (( testList.Count() > 0
        && p.Name.Contains(testList.FirstOrDefault()) ? 1 : 0 ) > 2

Por supuesto, eso parece un poco absurdo porque nunca puede ser verdad. ¿Estás seguro de que pretendías hacer esto? Tal vez realmente quieres compararlo con 1 o 0 para la igualdad en su lugar?



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