从Int Expression创建一个bool Linq to SQL Expression

时间:2011-02-19 01:06:38

标签: c# linq linq-to-sql expression-trees

在Linq to SQL中,我有一个返回int的表达式,我想根据返回布尔值的表达式创建一个表达式。 int可用于OrderBy(score),布尔值可用于Where(ifScore)。我无法弄清楚如何使用分数来定义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

1 个答案:

答案 0 :(得分:2)

我不确定这对LINQ to SQL有多好,但您可以使用Expression.GreaterThan创建适当的二进制表达式,然后只需创建正确的Expression<TDelegate>从那起。

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

最终表达式如下所示:

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

当然,这确实看起来有点荒谬,因为它永远不会成真。你确定你打算这样做吗?也许您真的想将它与10进行比较以获得相等性吗?