Creare un bool da Linq a SQL Expression da una espressione Int

c# expression-trees linq linq-to-sql

Domanda

In Linq to SQL ho un'espressione che restituisce un int, e voglio fare un'espressione basata su quell'espressione che restituisce un valore booleano. L'int può essere utilizzato per OrderBy(score) e il booleano può essere utilizzato per Where(ifScore) . Non riesco a capire come utilizzare il punteggio per definire ifScore e apprezzerei un po 'di aiuto.

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

Risposta accettata

Non sono sicuro di quanto questo funzionerà con LINQ su SQL, ma puoi usare Expression.GreaterThan per creare l'espressione binaria appropriata, e quindi è solo questione di creare la giusta Expression<TDelegate> da quella.

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

L'espressione finale sarà simile a:

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

Certo, sembra un po 'assurdo perché non può mai essere vero. Sei sicuro di aver intenzione di fare questo? Forse vuoi davvero confrontarlo con 1 o 0 per l'uguaglianza, invece?



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché