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