我正在使用nHibernate 3.2.0.4000。我使用nHibernate.Linq
编写了这个查询var entities = (from t in this.Session.Query<Task>()
where NotIn(t, role.Tasks)
select t).ToList();
这里是方法NotIn()
private bool NotIn(Task t, IEnumerable<TaskDto> tasks)
{
foreach (var task in tasks)
{
if (t.Name == task.Name) return false;
}
return true;
}
当我执行此查询时,我遇到了NotSupportedException
错误:
Boolean NotIn(Probel.NDoctor.Domain.DAL.Entities.Task, System.Collections.Generic.IEnumerable`1[Probel.NDoctor.Domain.DTO.Objects.TaskDto])
我发现 non Linq 解决方案的可读性较差,但我仍然希望至少理解为什么不可能像这样构建Linq查询。
提前感谢您的帮助!
答案 0 :(得分:2)
您必须使用表达式树将NotIn
翻译为nHibernate SQL查询。
nhibernate linq provider extension 是一个很好的起点。
this link为{nHibernate提供了In
和NotIn
扩展方法。
答案 1 :(得分:1)
您在Linq中的代码最终被nhibernate转换为SQL查询。您不能使用无法转换为SQL代码的方法。
答案 2 :(得分:0)
NHibernate无法反编译,然后解析您的代码以获得有效的SQL。 无法从您的方法生成sql语句。
答案 3 :(得分:0)
改为使用:
var entities = (from t in this.Session.Query<Task>()
where !role.Tasks.Any(rt => rt.Name == t.Name)
select t).ToList();