我在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)));
}
但每次所有升降机列表都会返回查询。为什么方法比较每次都返回true? 哪里我错了? 谢谢
答案 0 :(得分: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);