2011-02-19 43 views
3

在Linq to SQL中我有一个表达式返回一个int,并且我想根据返回一个布尔值的那个表达式创建一个表达式。 int可用于OrderBy(score),布尔值可用于Where(ifScore)。我无法弄清楚如何使用分数来定义ifScore,并希望得到一些帮助。在Int表达式中创建一个bool Linq to SQL表达式

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 
+2

你的第一个表达式只能返回1或0的整数,这基本上是一个真/假。不知道你在努力完成什么 – Aducci

回答

2

我不知道有多好,这将与LINQ发挥到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比较,而不是平等?

+0

谢谢。这只是一个例子,但是你的2排顶部完美无缺。 –