如果“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子句。
感谢您的帮助。
答案 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);