A Func<Page, bool>
- делегат, что означает, что вы выполняете это в LINQ-to-Objects (то есть в памяти, в C #).Строки .NET чувствительны к регистру, поэтому будет применяться регистр.
Однако в этой версии:
var res1 = dataContext.Persons.Any(p=>p.Name== personName);
использует IQueryable<T>
и деревья выражений;он будет выполнен как фильтр TSQL, который будет применять правила базы данных.То, что здесь происходит, зависит от того, как сконфигурирована ваша БД (она может быть либо с учетом регистра, либо без учета регистра, в зависимости от базы данных).
Если вы хотите, чтобы они оба использовали одну и ту же логику, отметьте разницуздесь:
Expression<Func<Page, bool>> predicate = (p) => p.Name== personName;
var res2 = dataContext.Persons.Any(predicate);
Добавление Expression<...>
делает это дерево выражений , а не делегат , поэтому он «составляется» и выполняется набаза данных (через перевод TSQL), точно такая же как:
var res1 = dataContext.Persons.Any(p=>p.Name== personName);