使用linq确定某个集合中是否存在元素的替代方法?

时间:2011-08-20 00:01:48

标签: .net linq

我用:

if (!ObjectCollection.Any(o => o.Property == SomeValue))
    // ...

或:

if (!IntCollection.Contains(42))
    // ...

确定的集合是否具有特定元素,但有些人会错过!否定和误解。

是否有另一种方法可以确定集合不包含不使用否定运算符的特定元素?我更喜欢坚持使用点符号而不是查询表达式,但是对于错过爆炸的人来说,查询表达式可能更具可读性。

3 个答案:

答案 0 :(得分:4)

标准LINQ中没有任何内容,但如果您真的不喜欢使用!(这是我推荐的方法),您可以随时编写自己的扩展方法:< / p>

public static bool DoesNotContain<T>(this IEnumerable<T> source, T item)
{
    return !source.Contains(item);
}


public static bool None<T>(this IEnumerable<T> source, Func<T, bool> predicate)
{
    return !source.Any(predicate);
}

(您可以将这些用于LINQ to SQL以及,如果您只是将它们用作最终调用 - 您将无法在嵌套查询中使用它们,因为查询翻译者不会理解它们。)

答案 1 :(得分:1)

我理解您对可读性的关注!运营商。我用过的两种常见解决方案:

A)在周围放置空格!所以它突出,更容易看到la

if ( ! IntCollection.Contains(42) )
    // ... the ! stands out

B)编写一个可读性扩展方法,使其更好

public static class Readability
{
    public static bool Missing<T>(this Enumerable<T> source, T value)
    {
        return ! source.Contains(value);
    }
}

答案 2 :(得分:0)

我的建议是将!替换为== false

if (ObjectCollection.Any(o => o.Property == SomeValue) == false)
    // ...

if (IntCollection.Contains(42) == false)
    // ...