Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq到NHibernate多个OrderBy调用_Linq_Nhibernate_Linq To Nhibernate - Fatal编程技术网

Linq到NHibernate多个OrderBy调用

Linq到NHibernate多个OrderBy调用,linq,nhibernate,linq-to-nhibernate,Linq,Nhibernate,Linq To Nhibernate,在Linq到NHibernate查询中,按多个字段排序时遇到问题。是否有人知道可能出了什么问题,或者是否有解决办法 代码: IQueryable items=\u agendapository.GetAgendaItems(位置) .Where(item=>item.Minutes.Contains(查询)| | item.Description.Contains(查询)); int total=items.Count(); var结果=项目 .OrderBy(item=>item.Agenda

在Linq到NHibernate查询中,按多个字段排序时遇到问题。是否有人知道可能出了什么问题,或者是否有解决办法

代码:

IQueryable items=\u agendapository.GetAgendaItems(位置)
.Where(item=>item.Minutes.Contains(查询)| | item.Description.Contains(查询));
int total=items.Count();
var结果=项目
.OrderBy(item=>item.Agenda.Date)
.ThenBy(item=>item.OutcomeType)
.ThenBy(项目=>项目结果编号)
.Skip((第1页)*页面大小)
.Take(页面大小)
.ToArray();
返回新的搜索结果(查询、合计、结果);
我试着用多个OrderBy电话代替ThenBy。同样的结果。如果我注释掉这两个ThenBy调用,那么该方法非常有效

我收到的错误信息:

[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 [SqlException(0x80131904):列名“\uuuu hibernate\u sort\u expr\u 0\uuuuuuuuu hibernate\u sort\u expr\u 1”无效。 列名“\uuuuHibernate\uSort\uExpr\u0\uuuuuuuuuuuHibernate\uSort\uExpr\u1\uuuuuuu”无效。] System.Data.SqlClient.SqlConnection.OnError(SqlException异常,布尔breakConnection)+1948826 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException异常,布尔breakConnection)+4844747 System.Data.SqlClient.TdsParser.throweexception和warning(TdsParserStateObject stateObj)+194 System.Data.SqlClient.TdsParser.Run(RunBehavior RunBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj)+2392 [ADO异常:无法执行查询 [选择该项目作为Id5 2 2,该项目作为Id5 2 2,该项目作为Id5 2,该项目作为代理5 2,该项目描述描述作为描述3 5 5 2,该描述作为描述3 5 5 5 2,该描述作为描述描述3 5 5 2,该描述作为描述3 5 5 5 2,该描述作为描述3 5 5 5 5 2 2,该描述作为描述描述3 5 5 5 5 5 2,该描述,该描述作为描述描述,该描述描述作为描述3 5 5 5 2,该描述,该描述,该描述,该描述作为描述作为描述,该描述,该,该,该项目作为描述作为描述作为描述作为描述,这,该项目作为描述作为描述作为描述3 5 5 5 5 5 5 2,这,这,这,这,这,这,这,这,这个,这,这个,这个,这个,这个,这个,该描述作为描述作为描述作为描述作为描述作为描述作为描述作为描述,这个,这个,这个,这个,这个,这个描述作为描述作为描述,这个描述,这个描述,uFROM AgendaItem this_uuu外部联接议程agenda1_uuuuuuuuuuuuuuuuuuuuud=agenda1_uuuuuuid左外部联接位置Location 2_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu2_uuuuuuuu.Id=location2_uuuuuuuuu.Id其中location2_uuuuu.Id=?和(this_uuuuuu.minute like?或this_uuuuuuu 位置参数:#0>1#0>%Core%#0>%Core% [SQL:选择这个作为Id5 2 2,这个作为Id5 2,这个作为Agn,这个作为Agn 5 2,这个描述描述作为描述3 5 5 2,这个描述作为描述3 5 5 2,这个描述作为描述,这个描述作为描述3 5 5 2,这个描述作为描述3 5 5 5 5 2,这个作为Id5 5 2 2,这个作为结果数字作为结果5 5 5 5 2,这个。分钟作为分钟作为分钟2,2 2 2 2,Ag1.Id作为Id1.Id作为Id2,1.Id作为Id2 0,1.Id作为Id2,Ag2,Ag1.Id,Ag1.Id,Ag1.Id作为Id1.Id作为I2,Ag1,Ag1.Id作为Id1,Ag1.Id作为Id1.Id作为I2,Ag1,Ag1.Id作为Id1.Id作为Id2,Ag1.Id,Ag1.Id作为Id1,Ag1.Id作为Id1.Id作为Id1一,_从AgendaItem中,此上的此左外部联接议程agenda1。AgendaId=agenda1。Id在agenda1上左外部联接位置location2。LocationId=location2。Id,其中location2。Id=?和(此会议记录类似?或此描述类似?)按agenda1的顺序。日期asc,此日期asc,此输出Cometype asc,此输出编号asc]] NHibernate.Loader.Loader.DoList(ISessionImplementor会话,QueryParameters QueryParameters)+258 NHibernate.Loader.Loader.ListIgnoreQueryCache(ISessionImplementor会话,QueryParameters QueryParameters)+18 NHibernate.Loader.Loader.List(ISessionImplementor会话,QueryParameters QueryParameters,ISet`1 QuerySpace,IType[]结果类型)+87 NHibernate.Impl.SessionImpl.List(标准Impl标准,IList结果)+342 NHibernate.Impl.CriteriaImpl.List(IList结果)+41 NHibernate.Impl.CriteriaImpl.List()+35 C:\home\dev\tools\NHibernate\NHibernateContribSrc\src\NHibernate.Linq\src\NHibernate.Linq\NHibernate.Linq\criteriaresultrader.cs:22中的NHibernate.Linq.criteriaresultrader`1.List() C:\home\dev\tools\NHibernate\NHibernateContribSrc\src\NHibernate.Linq\src\NHibernate.Linq\NHibernate.Linq\criteriaresultrader.cs:27中的NHibernate.Linq.d\u 0.MoveNext()
虽然我不认为这会有什么不同,但如果你这样做会怎么样:


(从i.prop1、i.prop2、i.prop3排序的项目中的i开始)。跳过(…).Take(…).ToArray()

在我看来,这就像是一只由Linq到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)

若结果集相对较小,则首先将其转换为数组可能是一个可接受的解决方案。但是,如果您想让SQL server完成这项工作,最好这样做:

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

无论何时在Linq的NHibernate方言中使用OrderBy或OrderByAlias方法,您都应该在之后添加Asc或Desc修饰符。

是的,尝试过,结果被解析为相同的,并给出相同的错误。
var results = items
   .OrderBy(item => item.Agenda.Date).Asc
   .ThenBy(item => item.OutcomeType).Asc
   .ThenBy(item => item.OutcomeNumber).Asc
   .Skip((page - 1)*pageSize)
   .Take(pageSize)
   .ToArray();