asp.net – 使用LINQ从数据库中查找附近的地方
发布时间:2020-12-16 07:05:39 所属栏目:asp.Net 来源:网络整理
导读:我们希望在ASP.NET 2012中使用LINQ从数据库接收附近地点的列表,并希望对我们的策略有一些反馈. 我的表和假数据: PlaceId Name Latitude Longitude 1 A 18.1 20.1 2 B 18.2 20.2 3 C 18.3 20.3 1)在我们的项目中,客户端当前位置(纬度和经度)被视为输入 2)在
我们希望在ASP.NET 2012中使用LINQ从数据库接收附近地点的列表,并希望对我们的策略有一些反馈.
我的表和假数据: PlaceId Name Latitude Longitude 1 A 18.1 20.1 2 B 18.2 20.2 3 C 18.3 20.3 1)在我们的项目中,客户端当前位置(纬度和经度)被视为输入 2)在服务器端,根据客户端的当前位置,我们需要使用LINQ从数据库中查找附近的位置 这是我之前使用的SQL代码,但现在我们想使用LINQ. SELECT name,Latitude,Longitude,( 3959 * acos( cos( radians(?) )* cos( radians( Latitude) ) * cos( radians( Longitude ) - radians(?) ) + sin( radians(?) ) * sin( radians( Latitude) ) ) ) AS distance FROM TABLE_NAME HAVING distance < ? ORDER BY distance LIMIT 0,20 [但问题是如何在LINQ中编写这样的查询.] 我的工作: 在搜索解决方案时,我遇到了这段代码 var Value1 = 57.2957795130823D; var Value2 = 3958.75586574D; var searchWithin = 20; double latitude = ConversionHelper.SafeConvertToDoubleCultureInd(Latitude,0),longitude = ConversionHelper.SafeConvertToDoubleCultureInd(Longitude,0); var location = (from l in sdbml.Places let temp = Math.Sin(Convert.ToDouble(l.Latitude) / Value1) * Math.Sin(Convert.ToDouble(latitude) / Value1) + Math.Cos(Convert.ToDouble(l.Latitude) / Value1) * Math.Cos(Convert.ToDouble(latitude) / Value1) * Math.Cos((Convert.ToDouble(longitude) / Value1) - (Convert.ToDouble(l.Longitude) / Value1)) let calMiles = (Value2 * Math.Acos(temp > 1 ? 1 : (temp < -1 ? -1 : temp))) where (l.Latitude > 0 && l.Longitude > 0) orderby calMiles select new location { Name = l.name }); return location .ToList(); 但问题是,如何引用ConversionHelper或它来自哪个命名空间. 所有建议表示赞赏. 解决方法
所以,如果您想要的只是计算两个坐标之间的距离,为什么不使用Dot Net的GeoCoordinate?
它就像是 var firstCordinate = new GeoCoordinate(latitude1,longitude1); var secondCordinate = new GeoCoordinate(latitude2,longitude2); double distance = firstCordinate.GetDistanceTo(secondCordinate); 你可以在命名空间System.Device.Location中找到它. 因此,这将使您免于所有Math.Cos和Math.Sin,您的linq将简单明了. (可能是一个foreach循环会做) 所以你的整个查询可以概括为: List<Location> locations = new List<Location>(); foreach(var place in sdbml.Places) { //your logic to compare various place's co-ordinates with that of //user's current co-ordinate } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – WebService还是一个简单的MVC控制器?
- ASP.NET LinkBut??ton – 如何隐藏javascript_doPostBack?
- asp.net – UpdateProgress不适用于触发器属性内部的按钮
- asp.net-mvc-4 – 登录后WebSecurity.CurrentUserName和Use
- asp.net-core – 是否可以将NoSQL用于Identity Server 4?
- .net – MVC 4中MVC 4中强类型ActionLink的语法是什么?
- 在ASP.NET中上传文件时运行病毒扫描
- ASP.net角色和项目
- asp.net – 是否有支持请求参数连接的URL构建器?
- 将自定义属性添加到asp.NET RadioButton控件
推荐文章
站长推荐
- ASP.NET MVC模板助手 – 如何获取小写ID
- asp.net-mvc – 如何在视图中获取会话值asp.net核
- RegisterStartupScript无法在更新面板中工作,无法
- asp.net – httpCookies requireSSL在http上设置
- asp.net-mvc – 单元测试(mvc) – 带角色的问题
- asp.net-mvc – asp.net mvc – 视图中的命名空间
- asp.net-mvc-3 – 不能使用NuGet PagedList ASP.
- asp.net-mvc-3 – 我应该尝试使用MVC3和ASP.net的
- asp.net-mvc – 对象列表上的MVC3自定义不显眼验
- asp.net – 我什么时候应该使用Webservice属性Sy
热点阅读