扩展方法不能在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.Users
和db.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
我仍然有相同的错误。
我还应该用什么?
您可以这样使用扩展方法:
public static IQueryable<User> HasData(this IQueryable<User> u)
{
return u.Datas.Any();
}
使用:var u=db.Users.HasData();
但这将返回用户有任何数据,假设你有一个导航属性的用户数据名为Datas
(是的,我知道的复数数据是数据)