SQL中使用Distance()的距离
本文关键字:距离 Distance SQL | 更新日期: 2023-09-27 17:57:33
我正在尝试获取数据库中距离不超过200米的点,我使用以下代码,但它也检索数据库中的所有点
var pin = from pinsA in db.PINS
.Where(p => p.PRIVACY == 0 || p.USER_ID == userId
&& (double)currentPoint.Distance(p.location) < 200.0)
.Select(pr => new { pr.PIN_ID, pr.TYPE, pr.location })
select new { pinsA.PIN_ID, pinsA.TYPE, pinsA.location } ;
您没有提供具体的条件,但我认为Where
子句中缺少括号,请尝试:
Where((p => p.PRIVACY == 0 || p.USER_ID == userId)
&& (double)currentPoint.Distance(p.location) < 200.0)
尽管这是一个首选项,但我不确定是否需要混合匹配查询"语言"(这可能没有帮助),也不确定是否是否需要"双重"选择。
我也同意jnovo在上的帖子,即您的where子句中很可能缺少括号,但请尝试以下任一方法:
选项1:
var pinsWithin200 = from pins in db.Pins
where ((pins.PRIVACY == 0 || pins.USER_ID == userId) && pins.location.Distance(currentPoint) <= 200)
select new
{
PIN_ID = pins.PIN_ID,
TYPE = pins.TYPE,
location = pins.location
};
var results = pinsWithin200.ToList();
选项2:
var pinsWithin200 = db.Pins
.Where(p => (p.PRIVACY == 0 || p.USER_ID == userId) && p.location.Distance(currentPoint) <= 200)
.Select(p => new
{
PIN_ID = p.PIN_ID,
TYPE = p.TYPE,
location = p.location
};
var results = pinsWithin200.ToList();
无论你喜欢哪种,它们都更干净,而且没有双重选择。还要注意,用匿名类型显式命名属性是一种很好的做法。