좋아, 여기 내 문제가있다. 데이터베이스 테이블 BloodCenters
, latitude
및 longitude
필드가 있습니다. Linq Lambda Syntax를 사용하여 주어진 포인트를 기준으로 주어진 반경 내에있는 BloodCenters를 검색하여 해당 테이블을 쿼리하려고합니다.람다에서 사용자 정의 함수를 호출하는 방법 .NET 구문
은이 코드를 사용하고 있지만, 여전히합니다 (어디 조건 내에서) 나에게 오류를 제공합니다 :
public static List<BloodCenter> GetAllNearby(int latitude, int longitude, int radius, int limit){
List<BloodCenter> res = null;
res = new DBEntities().BloodCenters.Where(b =>
Util.distance(latitude, longitude, b.Latitude, b.Longitude, "K") <= radius).Take(limit);
return res;
}
Util.distance는 위도와 경도의 두 점 사이의 거리를 반환하는 기능입니다. 편집 됨 따라서 내 자신의 함수를 Where 술어 안에 넣을 수 없습니다. 하지만 SQL 구문을 사용하여 거리를 계산할 수 있습니까? 여기 내 Util.Distance
구현의 : Util.distance
이 C# 코드로 구현하고 쿼리 표면이는 SQL로 번역 될 얼마나 아무 생각이 없기 때문에 작동하지 않습니다
public static double distance(double lat1, double longi1, double lat2, double longi2, string unit){
var theta = longi1 - longi2;
var dist = Math.Sin(DegreeToRadian(lat1)) * Math.Sin(DegreeToRadian(lat2)) +
Math.Cos(DegreeToRadian(lat1)) * Math.Cos(DegreeToRadian(lat2)) * Math.Cos(DegreeToRadian(theta));
dist = Math.Acos(dist);
dist = RadianToDegree(dist);
var miles = dist * 60 * 1.1515;
unit = unit.ToUpper();
if (unit.Equals("K"))
return miles * 1.609344;
else if (unit.Equals("N"))
return miles * 0.8684;
else
return miles;
}
위도와 경도를 구현하는 것입니다? –
일부 관리 코드 대신 SQL Server 공간 데이터 형식을 사용해야 함 function –