c# - 我们可以将位置 SQL 转换为 C# LINQ 吗?
问题描述
这是一条返回 30 英里半径内的用户列表的 SQL 语句
SELECT
id, (
3959 * acos (
cos ( radians(78.3232) )
* cos( radians( lat ) )
* cos( radians( lng ) - radians(65.3234) )
+ sin ( radians(78.3232) )
* sin( radians( lat ) )
)
) AS distance
FROM users
HAVING distance < 30
ORDER BY distance
我正在使用 C# .NET Web API2,是否可以将上述内容转换为 LINQ 语句,以便我们可以让 API 获取这些数据?
解决方案
首先你需要为弧度定义这个方法
public static double Radians(double angle)
{
return (Math.PI / 180) * angle;
}
现在,您可以使用此查询
var distances = users
.Where(x => x.YourFilterOnPagination)
.ToList() // your collection most be List
.Select(x => new
{
id = x.id,
distance = (395 * Math.Acos(Math.Cos(Radians(78.3232)) *
Math.Cos(Radians(x.lat)) * Math.Cos(Radians(x.lat) - Radians(65.3234)) +
Math.Sin(Radians(78.3232)) *
Math.Sin(Radians(x.lat))))
})
.Where(d => d.distance < 30)
.OrderBy(d => d.distance);
YourFilterOnPagination:如果您的数据很大,您可以将其限制在 w
推荐阅读
- java - 将日期转换为 YYYY-MM-DD HH:MM:SS
- android - sdk manager visual studio中的错误“找不到中央目录”
- assembly - 如何用null修改字符串中的字符
- mysql - 在 mysql docker 容器中禁用 ONLY_FULL_GROUP_BY 模式
- android - 如果我们已经在 app/build.gradle 中设置了 AndroidManifest.xml 中的 versionCode 和 versionName,需要什么?
- python - 如何将存储为txt的列表导入熊猫?
- maven - 在 Red Hat Enterprise Linux 8.3 版上安装 Maven:未显示 Maven 版本
- java - 通过语言识别将项目从基于火的数据库卸载到回收卡
- datagrid - 如何使我的布尔列在 ag-grid 中显示复选框
- android - 在 android 中使用 OPENGLES 绘制天空网格(球体)