在Linq中将func作为参数传递给实体和“内部.NET Framework数据提供程序错误1025"错误 [英] Passing func as parameter in Linq to Entities and 'Internal .NET Framework Data Provider error 1025' error
问题描述
我们有一个名为Task的类:
We have a class called Task:
public partial class Task : EntityObject
{
public EntityCollection<TaskUser> TaskUsers { get {...} set{...} }
}
它具有名为TaskUsers的导航属性,其中包含与此任务关联的用户:
It has navigation property called TaskUsers, which contains users attached to this taks:
public partial class TaskUser : EntityObject
{
public User User { get {...} set { } }
}
每个TaskUser对象都有一个User对象.
Every TaskUser object has User object.
我们得到了IQueryable<Task> tasks
.我们想找到分配给ID = 1的用户的任务.
We are given IQueryable<Task> tasks
. We want to find tasks assigned to user with ID = 1. When we use
tasks.Where(t => t.TaskUsers.Any(a => a.User.ID == 1))
一切正常.当我们使用
Func<TaskUser, bool> function = a => a.User.ID == 1;
return tasks.Where(t => t.TaskUsers.Any(function));
我们得到很好的'Internal .NET Framework Data Provider error 1025'
错误.为什么?我想使用Expression
类构建更复杂的过滤器,但是如果我无法通过简单的Func
,则无法完成此操作.我该怎么办?
we get nice 'Internal .NET Framework Data Provider error 1025'
error. Why? I want to build much more complicated filters using Expression
class, but if I can't pass simple Func
, this can't be done. What should I do?
编辑
也许
Func<TaskUser, bool> function = a => a.User.ID == 1;
return tasks.Where(t => t.TaskUsers.Any(function));
不起作用,但是
Expression<Func<TaskUser, bool>> expression = a => a.User.ID == 1;
return tasks.Where(t => t.TaskUsers.AsQueryable().Any(expression));
有效!这就是我所需要的.
works! That is all I needed.
推荐答案
那么EF只能翻译表达式,而不能翻译函数.
Well the EF can only translate Expressions, not functions.
即它可以翻译成这样:
Expression<Func<TaskUser,bool>>
但不是这样:
Func<TaskUser,bool>
关于如何合并表达式(以伪代码):
As for how to merge expressions (in pseudo code):
Expression<Func<TaskUser, bool>> expression = a => a.User.ID == 1;
return tasks.Where(t => t.TaskUsers.Any(expression));
可能有一些表达大师可以提供帮助.
There are probably some Expression guru's who can help with that.
我建议针对该特定问题的后续问题
I suggest a followup question focused on that particular problem
亚历克斯
这篇关于在Linq中将func作为参数传递给实体和“内部.NET Framework数据提供程序错误1025"错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!