C# 传递谓词时返回不同结果的实体框架 string personName=“JoHn”; //(在我的桌子上,我已经有一个叫‘约翰’的人了) Func谓词=(p)=>p.Name==personName; var res2=dataContext.Persons.Any(谓词)//返回false var res1=dataContext.Persons.Any(p=>p.Name==personName);//返回true

C# 传递谓词时返回不同结果的实体框架 string personName=“JoHn”; //(在我的桌子上,我已经有一个叫‘约翰’的人了) Func谓词=(p)=>p.Name==personName; var res2=dataContext.Persons.Any(谓词)//返回false var res1=dataContext.Persons.Any(p=>p.Name==personName);//返回true,c#,linq,entity-framework,linq-to-entities,entity-framework-4.1,C#,Linq,Entity Framework,Linq To Entities,Entity Framework 4.1,我认为有了谓词,它就考虑了personName属性的case,而没有谓词,它就忽略了case 任何人都知道为什么???AFunc是一个委托,这意味着您正在LINQ to对象中运行它(即在内存中,在C#中)。净字符串区分大小写,因此这将适用于大小写 然而,这个版本: string personName= "JoHn"; //(in my table iam already having a person named='john') Func<Person, bool> predi

我认为有了谓词,它就考虑了
personName
属性的
case
,而没有谓词,它就忽略了
case

任何人都知道为什么???

A
Func
是一个委托,这意味着您正在LINQ to对象中运行它(即在内存中,在C#中)。净字符串区分大小写,因此这将适用于大小写

然而,这个版本:

string personName= "JoHn";  
//(in my table iam already having a person named='john')

Func<Person, bool> predicate = (p) => p.Name== personName;

var res2 = dataContext.Persons.Any(predicate);                //returns false
var res1 = dataContext.Persons.Any(p=>p.Name== personName);   // returns true
正在使用
IQueryable
和表达式树;它将作为TSQL过滤器执行,该过滤器将应用数据库规则。这里发生的事情取决于数据库的配置方式(它可能区分大小写,也可能不区分大小写,具体取决于数据库)

如果希望两者使用相同的逻辑,请注意此处的差异:

var res1 = dataContext.Persons.Any(p=>p.Name== personName); 

我已经知道答案了,我只是在检查是否有人知道->只是开玩笑。
Expression<Func<Page, bool>> predicate = (p) => p.Name== personName;
var res2 = dataContext.Persons.Any(predicate);
var res1 = dataContext.Persons.Any(p=>p.Name== personName);