2008-09-13 12 views
6

मुझे अपने लिंक में एनएचबीरनेट क्वेरी में एक से अधिक फ़ील्ड द्वारा ऑर्डर करने में समस्या हो रही है। क्या कोई भी जानता है कि क्या गलत हो सकता है या यदि कोई काम है?लिंक से एनएचबर्ननेट एकाधिक ऑर्डरबी कॉल

कोड:

IQueryable<AgendaItem> items = _agendaRepository.GetAgendaItems(location) 
    .Where(item => item.Minutes.Contains(query) || item.Description.Contains(query)); 

int total = items.Count(); 

var results = items 
    .OrderBy(item => item.Agenda.Date) 
    .ThenBy(item => item.OutcomeType) 
    .ThenBy(item => item.OutcomeNumber) 
    .Skip((page - 1)*pageSize) 
    .Take(pageSize) 
    .ToArray(); 

return new SearchResult(query, total, results); 

मैं कई OrderBy कॉल के साथ ThenBy की जगह की कोशिश की है। वही परिणाम यदि मैं दो तेज़ी से कॉल करता हूं तो विधि बहुत बढ़िया काम करती है।

त्रुटि मैं प्राप्त कर रहा हूँ: मैं से (

आइटम मैं orderBy में:

 
    [SqlException (0x80131904): Invalid column name '__hibernate_sort_expr_0____hibernate_sort_expr_1__'. 
    Invalid column name '__hibernate_sort_expr_0____hibernate_sort_expr_1__'.] 
     System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +1948826 
     System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +4844747 
     System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +194 
     System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2392 

    [ADOException: could not execute query 
    [ SELECT this_.Id as Id5_2_, this_.AgendaId as AgendaId5_2_, this_.Description as Descript3_5_2_, this_.OutcomeType as OutcomeT4_5_2_, this_.OutcomeNumber as OutcomeN5_5_2_, this_.Minutes as Minutes5_2_, agenda1_.Id as Id2_0_, agenda1_.LocationId as LocationId2_0_, agenda1_.Date as Date2_0_, location2_.Id as Id7_1_, location2_.Name as Name7_1_ FROM AgendaItem this_ left outer join Agenda agenda1_ on this_.AgendaId=agenda1_.Id left outer join Location location2_ on agenda1_.LocationId=location2_.Id WHERE location2_.Id = ? and (this_.Minutes like ? or this_.Description like ?) ORDER BY agenda1_.Date asc, this_.OutcomeType asc, this_.OutcomeNumber asc ] 
    Positional parameters: #0>1 #0>%Core% #0>%Core% 
    [SQL: SELECT this_.Id as Id5_2_, this_.AgendaId as AgendaId5_2_, this_.Description as Descript3_5_2_, this_.OutcomeType as OutcomeT4_5_2_, this_.OutcomeNumber as OutcomeN5_5_2_, this_.Minutes as Minutes5_2_, agenda1_.Id as Id2_0_, agenda1_.LocationId as LocationId2_0_, agenda1_.Date as Date2_0_, location2_.Id as Id7_1_, location2_.Name as Name7_1_ FROM AgendaItem this_ left outer join Agenda agenda1_ on this_.AgendaId=agenda1_.Id left outer join Location location2_ on agenda1_.LocationId=location2_.Id WHERE location2_.Id = ? and (this_.Minutes like ? or this_.Description like ?) ORDER BY agenda1_.Date asc, this_.OutcomeType asc, this_.OutcomeNumber asc]] 
     NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters) +258 
     NHibernate.Loader.Loader.ListIgnoreQueryCache(ISessionImplementor session, QueryParameters queryParameters) +18 
     NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes) +87 
     NHibernate.Impl.SessionImpl.List(CriteriaImpl criteria, IList results) +342 
     NHibernate.Impl.CriteriaImpl.List(IList results) +41 
     NHibernate.Impl.CriteriaImpl.List() +35 
     NHibernate.Linq.CriteriaResultReader`1.List() in C:\home\dev\tools\NHibernate\NHibernateContribSrc\src\NHibernate.Linq\src\NHibernate.Linq\CriteriaResultReader.cs:22 
     NHibernate.Linq.d__0.MoveNext() in C:\home\dev\tools\NHibernate\NHibernateContribSrc\src\NHibernate.Linq\src\NHibernate.Linq\CriteriaResultReader.cs:27 

उत्तर

7

यह मुझे लिंक से NHybernate के साथ एक बग की तरह दिखता है। सॉर्टिंग से पहले एक सरणी में कनवर्ट करना एक संभावित कामकाज है। संभावित रूप से बड़ा नकारात्मक यह है कि आप गणना करने से पहले Skip() और Take() का उपयोग करके परिणामों को सीमित नहीं कर सकते हैं, इसलिए यह आपके लिए पर्याप्त नहीं हो सकता है।

var results = items 
    .ToArray() 
    .OrderBy(item => item.Agenda.Date) 
    .ThenBy(item => item.OutcomeType) 
    .ThenBy(item => item.OutcomeNumber) 
    .Skip((page - 1)*pageSize) 
    .Take(pageSize) 
0

हालांकि मुझे नहीं लगता है कि यह एक फर्क करना चाहते हैं, क्या हुआ अगर आप इस तरह अपने LINQ करना होता है। prop1, i.prop2, i.prop3) .Skip (...)। ले लो (...)। ToArray();

+0

हाँ, इसे आजमाया और इसे समाप्त कर दिया गया और यह वही त्रुटि देता है। – Rob

संबंधित मुद्दे