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 } ;

SQL中使用Distance()的距离

您没有提供具体的条件,但我认为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();

无论你喜欢哪种,它们都更干净,而且没有双重选择。还要注意,用匿名类型显式命名属性是一种很好的做法。