как исправить этот запрос SQL - PullRequest
0 голосов
/ 01 апреля 2019

Адресная таблица UserTable Этот запрос прекрасно работает в SQL Server Management Studio.Но когда я пытаюсь выполнить этот запрос в C #, он выдает исключение, пожалуйста, помогите мне.

Я пробовал много вещей, но не смог решить эту проблему.

SQL QUERY

set @LATITUDE=12 
set @LONGITUDE=12
Select * FROM [ChefODine].[dbo].[User] Inner Join [ChefODine].[dbo].[Address] on [ChefODine].[dbo].[User].AID=Address.ID
WHERE AID IN (
SELECT Top 5 ID
FROM [ChefODine].[dbo].[Address]
ORDER BY (ABS(ABS(LAT)-ABS(@LATITUDE)))+ABS(ABS(Lng)-ABS(@LONGITUDE)))

C # CODE

public HttpResponseMessage getNearByChef(double lat, double lng)
{
    var user = db.Users.SqlQuery("Select * FROM [ChefODine].[dbo].[User] Inner Join [ChefODine].[dbo].[Address] on [ChefODine].[dbo].[User].AID=Address.ID WHERE AID IN( SELECT Top 5 ID FROM[ChefODine].[dbo].[Address] ORDER BY(ABS(ABS(LAT) - ABS("+lat+"))) + ABS(ABS(Lng) - ABS("+lng+"))) ");
    return Request.CreateResponse(HttpStatusCode.OK,user);
}

Вот исключение:

«Сообщение»: «Произошла ошибка.», «ExceptionMessage»: «The ObjectContent»Типу 1 не удалось сериализовать тело ответа для типа контента application / json; charset = utf-8 '. "," ExceptionType ":" System.InvalidOperationException "," StackTrace ": null," InnerException ": {" Message ": «Произошла ошибка.», «ExceptionMessage»: «Средство чтения данных несовместимо с указанным« ChefODineModel.User ». Элемент типа« Date_time »не имеет соответствующего столбца в считывателе данных сто же имя. "," ExceptionType ":" System.Data.Entity.Core.EntityCommandExecutionException ","StackTrace": "в System.Data.Entity.Core.Query.InternalTrees.ColumnMapFactory.GetMemberOrdinalFromReader (DbDataReader storeDataReader, член EdmMember, EdmType currentType, словарь'2 renameList) \ r \ neryQ.Equery.ore в System.Data. .InternalTrees.ColumnMapFactory.GetColumnMapsForType (DbDataReader storeDataReader, EdmType edmType, Dictionary'2 renameList) \ r \ n в System.Data.Entity.Core.Query.InternalTrees.ColumnMapFactory. 2 renameList) \ r \ n в System.Data.Entity.Core.Objects.ObjectContext.InternalTranslate [TElement] (читатель DbDataReader, String entitySetName, MergeOption mergeOption, логический поток, EntitySet & entitySet, TypeUsage & edm \ nype). Data.Entity.Core.Objects.ObjectContext.ExecuteStoreQueryInternal [TElement] (String commandText, String entitySetName, ExecutionOptions executeOptions, Object [] параметры) \ r \ n в System.Data.Entity.Core.Obje cts.ObjectContext. <> c__DisplayClass65'1.b__64 () \ r \ n в System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction [T] (Func'1 func, IDbExecutionStrategy executeStrategy, логическая переменная startLocalTransuctionOlectionOlectionOlectionOlectionOll) r \ n в System.Data.Entity.Core.Objects.ObjectContext. <> c__DisplayClass65'1.b__63 () \ r \ n в System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute [TResult] (операция Func'1) \ r \ n в System.Data.Entity.Core.Objects.ObjectContext.ExecuteStoreQueryReliably [TElement] (String commandText, String entitySetName, ExecutionOptions executeOptions, параметры Object []) \ r \ n в System.Data.Entity.Core.Objects .ObjectContext.ExecuteStoreQuery [TElement] (String commandText, String entitySetName, ExecutionOptions executeOptions, параметры Object []) \ r \ n в System.Data.Entity.Internal.Linq.InternalSet'1. <> C__DisplayClass11.b__10 () \ r \ n в System.Data.Entity.Internal.LazyEnumerator'1.MoveNext () \ r \ n в Newtonsoft.Json.Serialization.JsonSeria lizerInternalWriter.SerializeList (писатель JsonWriter, значения IEnumerable, контракт JsonArrayContract, член JsonProperty, коллекция JsonContainerContract collectionContract, контейнерное свойство JsonProperty) \ r \ n в Newtonsoft.Json.Serialization.JsonProtainControl_JT containerContract, JsonProperty containerProperty) \ r \ n в Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize (JsonWriter jsonWriter, значение объекта, тип objectType) \ r \ n в Newtonsoft.Json.JsonSerializer.SerializeInternal (значение объекта JsonWriter, JsonWriter, JsonWriter ) \ r \ n в System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream (Тип типа, Значение объекта, Поток writeStream, Кодирование эффективноеEncoding) \ r \ n в System.Net.Http.Formatting.JsonMediaTypeFormatter.WriteToStream (Тип, тип Значение объекта, Stream writeStream, Кодировка эффективного кодирования) \ r \ n в System.Net.Http.F ormatting.BaseJsonMediaTypeFormatter.WriteToStream (Тип типа, Значение объекта, Поток writeStream, содержимое HttpContent) \ r \ n в System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStreamAsync (Тип типа, Значение объекта, Транспортный контент потока, Константный текст Htteptetetetetete CancellationToken cancellationToken) \ r \ n --- Конец трассировки стека от предыдущего местоположения, где было сгенерировано исключение --- \ r \ n в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Задача) \ r \ n в System.Runtime .CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) \ r \ n в System.Web.Http.WebHost.HttpControllerHandler.d__1b.MoveNext () "

1 Ответ

0 голосов
/ 01 апреля 2019

"Считыватель данных несовместим с указанным ChefODineModel.User. Член типа Date_time не имеет соответствующего столбца в считывателе данных с таким же именем.",

Пользовательский объект не может быть сопоставлен с ChefODineModel.User, так как date_time не существует в модели Dto.кроме того, вы можете использовать SqlParameter, когда вам нужно передать данные в запрос

public HttpResponseMessage getNearByChef(double lat, double lng)
        {
            string query = @"Select u.* FROM [ChefODine].[dbo].[User] u
                             Inner Join [ChefODine].[dbo].[Address] on [ChefODine].[dbo].[User].AID=Address.ID 
                             WHERE AID IN( SELECT Top 5 ID FROM[ChefODine].[dbo].[Address] ORDER BY(ABS(ABS(LAT) - ABS(@LATITUDE))) + ABS(ABS(LATITUDE) - ABS(@LONGITUDE)))";
            var user = db.Users.SqlQuery(query, new SqlParameter("@LATITUDE", lat), new SqlParameter("@LONGITUDE", lng)).ToList();
            return Request.CreateResponse(HttpStatusCode.OK, user);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...