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

时间:2015-09-30 12:04:44

标签: c# linq

我尝试在LINQ查询中使用扩展方法,方法如下(EF Code First):

 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.NotSupportedException'类型的异常   UserData.dll但未在用户代码中处理

     

其他信息:LINQ to Entities无法识别该方法   'Boolean ToBool(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

我仍然有同样的错误。

我还应该使用什么?

1 个答案:

答案 0 :(得分:0)

您可以使用以下扩展方法:

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

用过:

var u=db.Users.HasData();

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