0

如果“属性”大于 0,则我的 LINQ 查询返回值,否则它不起作用并且我没有收到错误。我猜第三行中的 && 想要另一个声明,如果“属性”不大于 0,它不会得到。我该如何克服这个问题?

编辑:我首先编写的代码正在执行 abatishchev 的回答。我试图在没有 else 的情况下做一个速记 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;

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

感谢您的帮助。

4

4 回答 4

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

表示'如果属性大于0并且表属性等于给定,否则跳过'

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

表示'如果属性大于0并且表属性等于给定,否则包括'

于 2012-12-08T22:48:24.327 回答
1

我想你可能想这样做

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

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

于 2012-12-08T22:51:38.497 回答
0

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

于 2012-12-08T22:48:04.553 回答
0
if (attribute > 0)
   query = query.Where(a => a.Table2.Attribute == attribute);
于 2012-12-08T23:34:23.500 回答