在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
答案 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
当然,这确实看起来有点荒谬,因为它永远不会成真。你确定你打算这样做吗?也许您真的想将它与1
或0
进行比较以获得相等性吗?