2016-08-15 4 views
0

Xamarin에서 SQLite.NET 패키지를 사용하여 쿼리를 작성하려고합니다.SQL을 가져올 수 없습니다. 빼기

public static List<Place> searchForPlace(double lat, double lng) 
{ 
    var query = conn.Table<GPSPoint>().Where(v => Math.Sqrt(Math.Pow(v.lat - lat, 2) - Math.Pow(v.lng - lng, 2)) < 5); 

    List<Place> l = new List<Place>(); 

    foreach (var gpsPoint in query) // the foreach statement causes the error System.NotSupportedException: Cannot get SQL for: Subtract 
    { 
     var queryPlaces = conn.Table<Place>().Where(v => v.ID == gpsPoint.ID); 
     foreach (var place in queryPlaces) 
      l.Add(place); 
     break; 
    } 
    return l; 
} 

그러나 내 코드는이 오류 System.NotSupportedException: Cannot get SQL for: Subtract을 제공합니다.

이것은 내가 데이터베이스

public DatabaseConnection() 
{ 
    string folder = Environment.GetFolderPath(Environment.SpecialFolder.Personal); 
    conn = new SQLiteConnection(System.IO.Path.Combine(folder, "navigationApp.db")); 
    conn.CreateTable<GPSPoint>(); 
    conn.CreateTable<Place>(); 
} 
문제가 무엇

, 내가 그것을 어떻게 해결할 수 init을 위해 사용하는 코드?

답변

0

문제는 where 절에 있습니다.

var query = conn.Table<GPSPoint>().Where(v => Math.Sqrt(Math.Pow(v.lat - lat, 2) - Math.Pow(v.lng - lng, 2)) < 5); 

LINQ하려면 SQL 그것도 Math.Sqrt, Math.Pow을 평가 할려고이 표현하고 빼기을 평가하기 때문에

. 그런 식으로 SQL에서 계산을 실행할 수 없기 때문에 데이터를로드하고 평가해야합니다.

가능한 해결책이 될 수 있습니다. 아마도 다른 bool 절을 정의하여 사전에 몇 가지 점을 정렬 할 수 있습니다.

var gpsPoints = conn.Table<GPSPoint>(); 
var validPoints = gpsPoints.Where(v => Math.Sqrt(Math.Pow(v.lat - lat, 2) - Math.Pow(v.lng - lng, 2)) < 5); 
+0

코드는 나에게 당신은 호출 할 필요가 –

+0

을 found' 될 수있는 오류'TableQuery 가 'ToList'와 형식의 첫 번째 인수 'TableQuery '을 받아들이없는 확장 메서드 'ToList'에 대한 정의가 포함되어 있지 않습니다를 제공합니다 'ToList()'에 제네릭 인자를 넣어보세요. 'ToList ()'; –

+0

'ToList' 메서드를 전혀 호출 할 수 없습니다. [이 방법에 대한 정의가 없습니다] (http://imgur.com/LAMZAgp). –