我试图使用linq来nhibernate 3并且我已经进行了以下linq查询
var a = (from c in Session.Query<ChoiceValue>()
join Specific in
(
(from choicevaluelocale in Session.Query<ChoiceValueLocale>()
where
choicevaluelocale.UICulture == "en-GB"
select new
{
choicevaluelocale.ChoiceValue.ChoiceGroup.ChoiceGroupName,
choicevaluelocale.ChoiceValue.ChoiceValueId,
choicevaluelocale.DisplayName,
choicevaluelocale.Description
}))
on new { c.ChoiceGroup.ChoiceGroupName, c.ChoiceValueId }
equals new { Specific.ChoiceGroupName, ChoiceValueId = (Int32)Specific.ChoiceValueId } into Specific_join
from Specific in Specific_join.DefaultIfEmpty()
select new
{
c.ChoiceGroup.ChoiceGroupName,
ChoiceValueId = (Int32?)c.ChoiceValueId,
SpecificValueDisplayName = Specific.DisplayName,
SpecificValueDescription = Specific.Description,
}).ToList();
但是在c#中的n-hibernate上执行它时出现了以下错误
The method or operation is not implemented
堆栈跟踪
at NHibernate.Linq.Visitors.QueryModelVisitor.VisitGroupJoinClause(GroupJoinClause
groupJoinClause, QueryModel queryModel, Int32 index)
at Remotion.Data.Linq.Clauses.GroupJoinClause.Accept(IQueryModelVisitor visitor,
QueryModel queryModel, Int32 index)
at Remotion.Data.Linq.QueryModelVisitorBase.VisitBodyClauses(ObservableCollection`1
bodyClauses, QueryModel queryModel)
at Remotion.Data.Linq.QueryModelVisitorBase.VisitQueryModel(QueryModel queryModel)
at NHibernate.Linq.Visitors.QueryModelVisitor.GenerateHqlQuery(QueryModel
queryModel, VisitorParameters parameters, Boolean root)
at NHibernate.Linq.NhLinqExpression.Translate(ISessionFactoryImplementor
sessionFactory)
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:4)
在我看来,你使用的Linq to Hibernate库是不完整的。某处NotImplementedException
被抛出。你使用的是稳定版吗?
互联网上的快速搜索表明不支持选择中的组连接和子查询。您在示例中使用了组连接,因此例外。具体来说,以下帖子:
在NHibernate 3.1源代码中,抛出异常的方法看起来完全如下:
public override void VisitGroupJoinClause(GroupJoinClause groupJoinClause, QueryModel queryModel, int index)
{
throw new NotImplementedException();
}
UPDATE :从版本5.1.x开始,NHibernate的LINQ提供程序仍然does not support这个操作。
有些解决方案建议编写自己的HQL(如原始SQL)而不是Linq语法。