Créer une expression Linq to SQL bool à partir d'une expression int

c# expression-trees linq linq-to-sql

Question

Dans Linq to SQL, j'ai une expression qui renvoie un int et je souhaite créer une expression basée sur cette expression qui renvoie un booléen Le int peut être utilisé pour OrderBy(score) et le booléen pour Where(ifScore) . Je suis incapable de comprendre comment utiliser score pour définir ifScore et j'apprécierais de l'aide.

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

Réponse acceptée

Je ne sais pas si cela va bien jouer avec LINQ to SQL, mais vous pouvez utiliser Expression.GreaterThan pour créer l'expression binaire appropriée. Il suffit ensuite de créer l' Expression<TDelegate> .

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

L'expression finale ressemblera à quelque chose comme:

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

Bien sûr, cela semble un peu absurde, car cela ne peut jamais être vrai. Êtes-vous sûr de vouloir faire ça? Peut-être que vous voulez vraiment comparer avec 1 ou 0 pour l'égalité à la place?



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow