LINQ with if语句

时间:2012-12-08 22:39:53

标签: c# linq entity-framework linq-to-entities

如果“attribute”大于0,我的LINQ查询返回值,否则它不起作用,我没有得到任何错误。 我猜&&在第三行中想要另一个声明,如果“属性”不大于0,它就不会得到。我怎么能克服这个?

编辑:我先写的代码正在做abatishchev的回答。我试图做一个简短的if语句而没有别的,但我已经读过那个错误,所以代码是为了做其他事情然后它实际上做了。感谢您对此事的启发,但我仍然不知道如何实现我对linq的初步愿望,所以我已经将代码重新安排到了更接近我目标的位置。

int attribute = 0;
var query = from x in db.Table1
            where x.ValueId == 1

            if(attribute > 0)
                x.Table2.Attribute == attribute

            select x;

如果attribute大于0,那么我不想在查询中添加一个额外的where子句。

感谢您的帮助。

4 个答案:

答案 0 :(得分:4)

(attribute > 0) && x.Table2.Attribute == attribute

表示'if属性大于0且table属性等于给定,否则跳过'

attribute <= 0 || ((attribute > 0) && x.Table2.Attribute == attribute)

表示'if属性大于0且table属性等于给定,否则包括'

答案 1 :(得分:1)

我想你可能想要这样做

int attribute = 0;
var query = from x in db.Table1
            where (attribute <= 0) ||
            (x.ValueId == 1 &&
            x.Table2.Attribute == attribute)
            select x;

当属性为&lt; = 0时,这会导致Table1中的所有内容。如果属性大于零,那么它将应用您的过滤器。

答案 2 :(得分:0)

如果属性大于0,attribute > 0评估为false,并且因为您在where过滤器中使用它,则x实际上没有通过该过滤器你得到一个空的枚举,这是唯一正确的。所以答案是检查你的逻辑,重新思考attribute应该是什么意思以及它应该如何影响查询结果。

答案 3 :(得分:0)

if (attribute > 0)
   query = query.Where(a => a.Table2.Attribute == attribute);