可以优化此LINQ查询中的where-condition吗?

时间:2009-12-29 19:27:29

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

我有这个LINQ查询:

            bool? a, b, c;

            from i in _ctx.SomeEntitySet

            where
                (a == null ? true : i.IsA == a) &&
                (b == null ? true : i.IsB == b) &&
                (c == null ? true : i.IsC == c)

            select i;

如果IsX == x,我只想考虑条件x != null


Brainfreeze,请帮帮我......

3 个答案:

答案 0 :(得分:4)

where (a == null || i.IsA == a) &&
      (b == null || i.IsB == b) &&
      (c == null || i.IsC == c)

答案 1 :(得分:3)

不确定它是否更有效,但它读得更好:

        bool? a, b, c;

        from i in _ctx.SomeEntitySet

        where
            (a == null || i.IsA == a) &&
            (b == null || i.IsB == b) &&
            (c == null || i.IsC == c)

        select i;

答案 2 :(得分:1)

我认为你最清楚的版本表达了这个意图。我不会改变它。

备选方案:

a == null || i.IsA == a;

!a.HasValue || i.IsA == a;

i.IsA == (a ?? i.IsA);

然而,这些对我来说都不是更清楚。不要注重效率,注重可读性和表现力。