如何修复sql的这个查询

问题描述 投票:-2回答:1

Address TableUserTableThis Query在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#代码

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”:“'ObjectContent'1'类型无法序列化内容类型'application / json; charset = utf-8'。”,“ExceptionType”的响应正文:“System.InvalidOperationException”,“StackTrace”:null,“InnerException”:{“消息”:“发生错误。”,“ExceptionMessage”:“数据读取器与指定的'ChefODineModel.User'不兼容。类型为“Date_time”的成员在数据读取器中没有相应名称的相应列。“,”ExceptionType“:”System.Data.Entity.Core.EntityCommandExecutionException“,”StackTrace“:”at System。在System.Data.Entity.Core.Query.InternalTrees.ColumnMapFactory.GetColumnMapsForType(DbDataReader)中的Data.Entity.Core.Query.InternalTrees.ColumnMapFactory.GetMemberOrdinalFromReader(DbDataReader storeDataReader,EdmMember成员,EdmType currentType,Dictionary'2 renameList)\ r \ n System.Data.Entity.Core.Query.InternalTr中的storeDataReader,EdmType edmType,Dictionary'2 renameList)\ r \ n System.Data.Entity.Core.Objects.ObjectContext.InternalTranslate [TElement](DbDataReader reader,String entitySetName,MergeOption mergeOption)中的Ees.ColumnMapFactory.CreateColumnMapFromReaderAndType(DbDataReader storeDataReader,EdmType edmType,EntitySet entitySet,Dictionary'2 renameList)\ r \ n System.Data.Entity.Core.Objects.ObjectContext.ExecuteStoreQueryInternal [TElement](String commandText,String entitySetName,ExecutionOptions executionOptions,Object [] parameters)\ r \ n,布尔流,EntitySet&entitySet,TypeUsage&edmType)\ r \ n at System.Data.Entity.Core.Objects.ObjectContext。<> c__DisplayClass65'1.b__64()\ r \ n在System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction [T](Func'1 func,IDbExecutionStrategy) executionStrategy,Boolean startLocalTransaction,Boolean releaseConnectionOnSuccess)\ r \ n在System.Data.Entity.Core.Objects.ObjectContext。<> c__DisplayClass65'1.b__63()\ r \ n在System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute [TResult](Func'1歌剧在System.Data.Entity.Entity.Core的System.Data.Entity.Core.Objects.ObjectContext.ExecuteStoreQueryReliably [TElement](String commandText,String entitySetName,ExecutionOptions executionOptions,Object [] parameters)\ r \ n中\ r \ n .Objects.ObjectContext.ExecuteStoreQuery [TElement](String commandText,String entitySetName,ExecutionOptions executionOptions,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.JsonSerializerInternalWriter.SerializeList(JsonWriter writer,IEnumerable values,JsonArrayContract contract,JsonProperty member,JsonContainerContract collectionContract, JsonProperty containerProperty)\ r \ n在Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer,Object value,JsonContract valueContract,JsonProperty member,JsonContainerContract containerContract,JsonProperty containerProperty)\ r \ na t Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter,Object value,Type objectType)\ r \ n在Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter,Object value,Type objectType)\ r \ n在System.Net上.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(Type type,Object value,Stream writeStream,Encoding effectiveEncoding)\ r \ n在System.Net.Http.Formatting.JsonMediaTypeFormatter.WriteToStream(Type type,Object value,Stream writeStream,Encoding effectiveEncoding) \ r \ n在System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(Type type,Object value,Stream writeStream,HttpContent content)\ r \ n在System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStreamAsync(Type type,Object) value,Stream writeStream,HttpContent content,TransportContext transportContext,CancellationToken cancellationToken)\ r \ n ---从抛出异常的上一个位置开始的堆栈跟踪结束--- \ r \ n在System.Runtime.CompilerServ System.Web.Http.WebHost.HttpControllerHandler.d__1b.MoveNext()上的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\ r \ n中的ices.TaskAwaiter.ThrowForNonSuccess(任务任务)\ r \ n“

c# sql-server
1个回答
0
投票

“数据读取器与指定的'ChefODineModel.User'不兼容。类型成员'Date_time'在数据读取器中没有相应的列,具有相同的名称。”,

无法使用ChefODineModel.User映射用户对象,因为Dto模型中不存在date_time。除此之外,您必须在必须将数据传递到查询时使用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);
        }
© www.soinside.com 2019 - 2024. All rights reserved.