C# LINQ表达式节点类型';调用&x27;在LINQ to实体中不支持跳过
我有一个错误,LINQ to实体中不支持LINQ表达式节点类型“Invoke”C# LINQ表达式节点类型';调用&x27;在LINQ to实体中不支持跳过,c#,linq,C#,Linq,我有一个错误,LINQ to实体中不支持LINQ表达式节点类型“Invoke” var result = context.Users.Include("Roles") .OrderBy(x => x.UserID) .Where(x => !userIsAdmin(x)) .Skip(skip)
var result = context.Users.Include("Roles")
.OrderBy(x => x.UserID)
.Where(x => !userIsAdmin(x))
.Skip(skip)
.Take(take)
.ToList();
private readonly Func<User, bool> userIsAdmin = u => u.Roles.Any(y => y.Name.Equals(AdminRoleName));
var result=context.Users.Include(“角色”)
.OrderBy(x=>x.UserID)
.Where(x=>!userIsAdmin(x))
.Skip(Skip)
.拿(拿)
.ToList();
私有只读Func userIsAdmin=u=>u.Roles.Any(y=>y.Name.Equals(AdminRoleName));
我哪里写错了?LINQ to SQL和LINQ to Entities都在
表达式
上工作,而不是函数
(就像LINQ to Object那样),因此您必须将用户isadmin
声明为表达式
:
private只读表达式userIsAdmin=u=>u.Roles.Any(y=>y.Name.Equals(AdminRoleName));
您还应该考虑将表达式更改为:
private readonly Expression<Func<User, bool>> userIsAdmin = u => u.Roles.Select(y => y.Name).Contains(AdminRoleName));
private readonly Expression userIsAdmin=u=>u.Roles.Select(y=>y.Name).Contains(AdminRoleName));
它应该在生成的SQL查询中的语句中转换为
。表达式
上工作,而不是在函数
(像LINQ-to-Objects那样),因此您必须将用户isadmin声明为表达式
:
private只读表达式userIsAdmin=u=>u.Roles.Any(y=>y.Name.Equals(AdminRoleName));
您还应该考虑将表达式更改为:
private readonly Expression<Func<User, bool>> userIsAdmin = u => u.Roles.Select(y => y.Name).Contains(AdminRoleName));
private readonly Expression userIsAdmin=u=>u.Roles.Select(y=>y.Name).Contains(AdminRoleName));
它应该在生成的SQL查询中的
语句中转换为。MarcinJuraszek走上了正确的道路。您可以将谓词更改为:
private readonly Expression<Func<User, bool>> userIsNotAdmin = u => !u.Roles.Any(y => y.Name.Equals(AdminRoleName));
MarcinJuraszek走上了正确的道路。您可以将谓词更改为:
private readonly Expression<Func<User, bool>> userIsNotAdmin = u => !u.Roles.Any(y => y.Name.Equals(AdminRoleName));
我有一个新的错误-名称“userIsAdmin”在当前上下文中不存在,根本不起作用。(x=>!userIsAdmin(x))将出错,因为您无法调用这样的表达式,因为它不是委托。我有一个新错误-当前上下文中不存在名称“userIsAdmin”,这根本不起作用。(x=>!userIsAdmin(x))将出现故障,因为您无法调用这样的表达式,因为它不是委托。@Amit here:。其中(x=>!userIsAdmin(x))
其中
使用lambda参数构建表达式;在这个表达式中,userIsAdmin是一个Func
,因此,它被转换为,EntityFramework不支持表达式。调用,因为它不知道如何将它转换为SQL。在这里看一下这个@Amit:。其中(x=>!userIsAdmin(x))
其中
使用lambda参数构建表达式;在这个表达式中,userIsAdmin是一个Func
,因此,它被转换为,EntityFramework不支持表达式。调用,因为它不知道如何将其转换为SQL。请看这个