c# - 具有多种方法的 LINQ 表达式

标签 c# linq

我写了下面的代码,但我无法理解为什么它只返回两个元素而不是全部。看起来“Where”方法只适用于最后添加的方法。

class Person
{
    public int Age { get; set; }
    public string Name { get; set; }
}

class Program
{
    public static bool IsAdult(Person person)
    {
        return person.Age > 18;
    }

    public static bool MethodTrue(Person person)
    {
        return true;
    }

    static void Main()
    {
        var list = new List<Person>
        {
            new Person() { Age = 20, Name = "Artur" },
            new Person() { Age = 30, Name = "Adam" },
            new Person() { Age = 10, Name = "Wieslaw" },
            new Person() { Age = 15, Name = "Michal" }
        };


        Func<Person, bool> predicate = null;
        predicate += MethodTrue;
        predicate += IsAdult;

        var res = list.Where(predicate);
    }
}

最佳答案

如果您以这种方式连接委托(delegate),所有委托(delegate)都将被执行,但您只会从最后 中获得结果。 请参阅 hier 关于委托(delegate)的使用: https://msdn.microsoft.com/en-us/library/ms173172.aspx

如果委托(delegate)有返回值和/或输出参数,它返回调用的最后方法的返回值和参数。

倒序会给你所有的结果:

Func<Person, bool> predicate = null;
predicate += IsAdult;
predicate += MethodTrue;

但我认为以这种方式进行 linq 没有任何意义。你可以写

Func<Person, bool> predicate = x=> IsAdult(x) || MethodTrue(x);

或者 && ,这取决于你实际想要实现什么。

关于c# - 具有多种方法的 LINQ 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41386142/

相关文章:

c# - 为什么我们不能只使用 [][] 而不是 int[][]?

vb.net - 奇怪的 Linq 错误

c# - 选择其中一列包含值的列是否可能?在林克

c# - LINQ to SQL 查询父级并计算层次结构中的子级

c# - 如何判断属性是否需要调用?

c# - 通过 javascript/jquery 填充列表时如何在服务器端获取下拉值

C# SQlite INSERT INTO 不起作用

c# - WPF Canvas Children Bind ObservableCollection 可以包含不同形状和 TextBlocks 的 ViewModel 吗?

c# - 在内存中存储大量文本

c# - LINQ select 查询总是产生真值