What were the reasons for developing Linq extension methods that did not accept the true System.Predicates?

I noticed something while programming. I decided that instead of doing something like using Predicates with Exists () and then Find ():

            Predicate<dynamic> pred = cov => cov.EmployeeId == EmployeeId;
            if (EmployeeCoverageTerminated.Exists(pred))
            {
                var foundCoverage = EmployeeCoverageTerminated.Find(pred);
            }

I tried using FirstOrDefault as a replacement and tried passing my Predicate and realized that it was not working.

            //does not work
            Predicate<dynamic> pred = cov => cov.EmployeeId == EmployeeId;
            var foundCovarage = EmployeeCoverageCurrent.FirstOrDefault(pred);

             //works fine
            var foundCoverage = EmployeeCoverageCurrent.FirstOrDefault(cov => cov.EmployeeId == EmployeeId);

              //also works fine
            Func<dynamic, bool> func = cov => cov.EmployeeId == EmployeeId;
            var foundCoverage = EmployeeCoverageCurrent.FirstOrDefault(func);

I was wondering why it was designed so that instead it requires Func<T,bool>instead Predicate<dynamic>, when Find () and Exists () are both excellent with Predicates. I mean, even the parameter input name is called a predicate.

, , , Exists List < > while FirstOrDefault Enumerable Linq

, , , , Lambda Func < > Predicate < > , , , , API Linq / System.Predicate

, ?

+4

Source: https://habr.com/ru/post/1673914/


All Articles