我正在使用帮助方法根据用户访问权限预先过滤所有查询。
假设方法签名为:
public IQueryable<Client> GetAllClients()
为什么使用LINQ时这个代码有效:
IQueryable<Client> allItems = GetAllClients();
return (from item in allItems
where item.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase)
select item).FirstOrDefault();
但不是这样的:
return (from item in GetAllClients()
where item.Name.Equals(name, StringComparison.InvariantCultureIgnoreCase)
select item).FirstOrDefault();
我可以处理第一个,但由于已经离开LINQ几年了,理解这个问题的原因会很有帮助。
“不起作用”是指选项2会引发以下异常:
System.NotSupportedException类型的first chance exception在EntityFramework.SqlServer.dll中发生。
更多信息:LINQ to Entities不识别System.Linq.IQueryable`1[typename] GetAllClients()方法,并且该方法不能被转换为存储表达式。
Clients是存储在数据库中的数据类型。我正在为实体框架数据模型创建常用查询的方法,并且由于多租户设计具有由数据类型定义的安全访问权限,因此我希望在数据访问级别上进行过滤。
return
语句;b) 显示错误信息;c) 显示您正在尝试编写的方法的返回类型,那将会很有帮助。 - Jon Skeet