Erstellen Sie einen Bool-Linq-SQL-Ausdruck aus einem Int-Ausdruck

c# expression-trees linq linq-to-sql

Frage

In Linq to SQL habe ich einen Ausdruck, der ein int zurückgibt, und ich möchte einen Ausdruck basierend auf diesem Ausdruck erstellen, der einen booleschen Wert zurückgibt. Der Int kann für OrderBy(score) und der Boolesche OrderBy(score) kann für Where(ifScore) . Ich bin nicht in der Lage, herauszufinden, wie man mit Score ifScore definiert, und würde ifScore Hilfe ifScore .

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

Akzeptierte Antwort

Ich bin nicht sicher, wie gut das mit LINQ zu SQL spielen wird, aber Sie können Expression.GreaterThan , um den entsprechenden binären Ausdruck zu erstellen, und dann ist es nur eine Frage des Erstellens des richtigen Expression<TDelegate> von dem.

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

Der endgültige Ausdruck sieht ungefähr so ​​aus:

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

Natürlich sieht das ein bisschen unsinnig aus, weil es niemals wahr sein kann. Bist du sicher, dass du das beabsichtigst? Vielleicht möchten Sie es wirklich mit 1 oder 0 für Gleichheit vergleichen?




Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum