0

where句内のメソッドを呼び出すLinqのクエリがあります...コードは次のとおりです。

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の回答も検討する必要があります(なぜ反対票が投じられたのかわかりません)。

LINQ クエリを単純なforeachループに置き換え、デバッガーでコードをステップ実行してみてください。

コメントで示唆されているように、compare方法では、2 つの点がある範囲内にあるかどうかを測定する必要があります。そう:

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 に答える