SubSonic 3.0.0.3 | SimpleRepository - OrderByDescending и .First ()

этот код отлично работает в SQL Express 2008:

    return _repository.GetInstructions()
        .Where(x => x.PublishedDate != null)
        .OrderByDescending(x => x.PublishedDate)
        .First();

но при запуске с использованием SQL Server 2000 он ломается. вот ошибка. Я выложу след, если кто-то захочет его увидеть.

 FailedSystem.Data.SqlClient.SqlException: Line 1: Incorrect syntax near '('.

Вот след:

TestSqlITInstructionRepository.Should_Get_Latest_ITInstruction : FailedSystem.Data.SqlClient.SqlException: Line 1: Incorrect syntax near '('.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)
at SubSonic.DataProviders.DbDataProvider.ExecuteReader(QueryCommand qry) in DbDataProvider.cs: line 137
at SubSonic.Linq.Structure.DbQueryProvider.Execute<T>(QueryCommand`1 query, Object[] paramValues) in C:\Documents and Settings\nobody\My Documents\subsonic-SubSonic-3.0-8a52a0913ac0b8542d5d041262046c497387223f\subsonic-SubSonic-3.0-8a52a0913ac0b8542d5d041262046c497387223f\SubSonic.Core\Linq\Structure\DbQueryProvider.cs: line 280
at lambda_method(ExecutionScope )
at SubSonic.Linq.Structure.DbQueryProvider.Execute(Expression expression) in C:\Documents and Settings\nobody\My Documents\subsonic-SubSonic-3.0-8a52a0913ac0b8542d5d041262046c497387223f\subsonic-SubSonic-3.0-8a52a0913ac0b8542d5d041262046c497387223f\SubSonic.Core\Linq\Structure\DbQueryProvider.cs: line 131
at SubSonic.Linq.Structure.QueryProvider.System.Linq.IQueryProvider.Execute<S>(Expression expression) in C:\Documents and Settings\nobody\My Documents\subsonic-SubSonic-3.0-8a52a0913ac0b8542d5d041262046c497387223f\subsonic-SubSonic-3.0-8a52a0913ac0b8542d5d041262046c497387223f\SubSonic.Core\Linq\Structure\QueryProvider.cs: line 45
at System.Linq.Queryable.First<TSource>(IQueryable`1 source)
at Kiss.Test.Repositories.TestSqlITInstructionRepository.Should_Get_Latest_ITInstruction() in TestSqlITInstructionRepository.cs: line 73 

person No Body    schedule 12.08.2009    source источник
comment
Можете ли вы опубликовать sql, который генерирует этот запрос, а также трассировку стека?   -  person Adam Cooper    schedule 12.08.2009
comment
Это проблема - я разместил здесь решение: stackoverflow.com/questions/1397933/   -  person Dave Hogan    schedule 22.09.2010


Ответы (2)


Я не думаю, что SubSonic полностью поддерживает MS SQL 2000. Мои собственные выводы показывают, что .First () genarates TOP (1)
Для MS SQL 2000 он должен быть TOP 1 без скобок.

person Community    schedule 26.08.2009
comment
Это правда, я только что столкнулся с этой ошибкой и исправил ее вашим ответом. Теперь я использую SimpleRepository.Single вместо All и после First - person Tom; 25.02.2013

В документации SubSonic (http://subsonicproject.com/docs/Supported_Databases) говорится, что он поддерживает "SQL Сервер (200-2008) ", значит, это, вероятно, ошибка. Я думаю, вам, вероятно, следует отправить это как проблему на сайт SubSonic github.

person Jim W    schedule 26.08.2009