2012-11-15 20 views
10

İki sınıfım var (İstek & RequestDetail). Birleştirme ile iki sınıf arasında bir Linq To NHibernate sorgusuna ihtiyacım var. Ben q2 bir Where koşul eklendiBirden çok koşulu birleştirme ile bağlantı kurma Nhibernate

var q = SessionInstance.Query<Request>() 
     .Where(x => x.State == "Init"); 

var q2 = SessionInstance.Query<RequestDetail>(); 
q2 = q2.Where(xx => xx.Purpose.Contains("Purpose Sample")); // This line has a error When execution ‍‍`q.ToList()‍` 

q = q.Join(q2, request => request.Id, detail => detail.Id, (request, detail) => request); 

return q.ToList(); 

, Sonucu bir çalışma zamanı hatası vardır. istisna mesajıdır: Specified method is not supported.

Yığın İzleme:

at NHibernate.Hql.Ast.ANTLR.PolymorphicQuerySourceDetector.GetClassName(IASTNode querySource) 
    at NHibernate.Hql.Ast.ANTLR.PolymorphicQuerySourceDetector.Process(IASTNode tree) 
    at NHibernate.Hql.Ast.ANTLR.AstPolymorphicProcessor.Process() 
    at NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(IASTNode ast, String queryIdentifier, String collectionRole, Boolean shallow, IDictionary`2 filters, ISessionFactoryImplementor factory) 
    at NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(String queryIdentifier, IQueryExpression queryExpression, String collectionRole, Boolean shallow, IDictionary`2 filters, ISessionFactoryImplementor factory) 
    at NHibernate.Engine.Query.QueryPlanCache.GetHQLQueryPlan(IQueryExpression queryExpression, Boolean shallow, IDictionary`2 enabledFilters) 
    at NHibernate.Impl.AbstractSessionImpl.GetHQLQueryPlan(IQueryExpression queryExpression, Boolean shallow) 
    at NHibernate.Impl.AbstractSessionImpl.CreateQuery(IQueryExpression queryExpression) 
    at NHibernate.Linq.NhQueryProvider.PrepareQuery(Expression expression, IQuery& query, NhLinqExpression& nhQuery) 
    at NHibernate.Linq.NhQueryProvider.Execute[TResult](Expression expression) 
    at Remotion.Data.Linq.QueryableBase`1.GetEnumerator() 
    at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) 
    at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) 

Neden?

cevap

15

Hata olabilir.

var q = (from request in session.Query<Request>() 
     join detail in session.Query<RequestDetail>() on request.Id equals detail.Id 
     where request.State == "Init" && detail.Purpose.Contains("Purpose Sample") 
     select request).ToList(); 
+5

Bu cevap DÜNYA DUYURULDU gereken İşte

senin soruna yönelik geçici olduğunu! Yapabildiği ve işlediği yol budur! Kaç kere baktığımıza ve korkunç QueryOver şeylerinden başka bir çözüm bulunmadığına ya da yeni harita oluşturmaya zorlandığımıza inanamıyorum! – user2415376

1

akıcı-gösterimde:

var q = session.Query<Request>() 
     .Join(session.Query<RequestDetail>(), request => request.Id, detail => detail.Id, (request, detail) => new { 
      r = request, 
      d = detail 
     }) 
     .Where(rd => rd.r.State == "Init" && rd.d.Purpose.Contains("Purpose Sample")) 
     .Select(rd => rd.r) 
     .ToList();