扩展方法不能在LINQ表达式树中使用

本文关键字:表达式 LINQ 方法 不能 扩展 | 更新日期: 2023-09-27 18:15:11

我已经尝试使用扩展方法在我的LINQ查询如下方式(EF代码优先):

 from user in db.Users
 join data in db.Data on user.ID equals data.User_ID
 where data.Available.ToBool()

db.Usersdb.Data变量为DbSet类型。

然后我得到以下错误:

类型为'System '的异常。日志含义发生NotSupportedExceptionUserData.dll,但未在用户代码

中处理

附加信息:LINQ to Entities不识别该方法'Boolean工具(System.String)'方法,此方法不能翻译成存储表达式

扩展方法很简单:

 public static bool ToBool(this string source)
 {
      return source=="AA";
 }

所以我查看了表达式树并创建了一个表达式:

pivate readonly System.Linq.Expressions.Expression<Func<Data, bool>> Proper = d => d.Name.ToBool();

现在我这样使用它:

 from user in db.Users 
 join data in db.Data.Where(Proper) on user.ID equals data.User_ID

我仍然有相同的错误。

我还应该用什么?

扩展方法不能在LINQ表达式树中使用

您可以这样使用扩展方法:

public static IQueryable<User> HasData(this IQueryable<User> u)
{
  return u.Datas.Any();
}
使用:

var u=db.Users.HasData();

但这将返回用户有任何数据,假设你有一个导航属性的用户数据名为Datas(是的,我知道的复数数据是数据)