0

我在 Linq 中有一个查询,它调用 where 子句中的一个方法......这是代码:

it = {my iter}
{
   ...
   return from l in lifts
          where(compare(l.Trip.Start, it.Start, startRadius)) 
          select l;
}

private bool compare(POI a, POI b, int radius)
{
    return (((b.Position.X.Value - radius < a.Position.X.Value) 
              && (a.Position.X.Value < b.Position.X.Value + radius))
              && ((b.Position.Y.Value - radius < a.Position.Y.Value)
              && (a.Position.Y.Value< b.Position.Y.Value + radius)));
}

但查询每次返回所有电梯列表。为什么方法 compare 每次都返回 true?我哪里错了?谢谢

4

1 回答 1

2

您的数据或compare方法一定有问题。工作原理并没有什么神奇之处where。我敢打赌,如果您放入return false方法中compare,返回的列表将为空。

更新:如果您在查询执行时不确定it.Start价值,您也应该考虑@Jacob Proffitt 的答案(我不知道为什么它被否决)。

尝试用简单的foreach循环替换 LINQ 查询,并使用调试器逐步执行代码。

正如评论中所建议的那样,在compare方法中,您可能想要测量两个点是否在某个范围内。所以:

double x1 = a.Position.X.Value; 
double y1 = a.Position.Y.Value; 
double x2 = b.Position.X.Value; 
double y2 = b.Position.Y.Value; 

return ((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)) < (r*r);
于 2013-06-06T17:31:34.720 回答