使用Distance()的SQL中的距离

时间:2014-04-08 10:29:56

标签: c# entity-framework spatial

我试图获取距离不超过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 } ;

2 个答案:

答案 0 :(得分:0)

您没有提供具体条件,但我认为您的Where子句中缺少括号,请尝试:

Where((p => p.PRIVACY == 0 || p.USER_ID == userId)
      && (double)currentPoint.Distance(p.location) < 200.0)

答案 1 :(得分:0)

虽然它是偏好的东西,但我不确定是否需要混合匹配查询&#34;语言&#34; (这可能不是帮助),也不需要&#34; double&#34;选择。

我同意 jnovo&#39> 帖子,因为你很可能在你的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();

无论你喜欢什么,它们都更清洁,没有双重选择。另请注意,在匿名类型中明确命名属性的良好做法。