在Linq中将func作为参数传递给实体和“内部.NET Framework数据提供程序错误1025"错误 [英] Passing func as parameter in Linq to Entities and 'Internal .NET Framework Data Provider error 1025' error

查看:70
本文介绍了在Linq中将func作为参数传递给实体和“内部.NET Framework数据提供程序错误1025"错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们有一个名为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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆