2015년 9월 13일 일요일

EF 6 Stored Procedure



단일값 반환
var param = new SqlParameter { ParameterName = "idx", Value = 1 };
var result = context.Database.SqlQuery("ProcedureName @idx", param);
return result.FirstOrDefaultAsync().Result;

리스트 반환
context.Database.SqlQuery("GetPerson").AsQueryable();

Output parameter
var param = new SqlParameter { ParameterName = "idx", Value = 1 };
var output_param = new SqlParameter { ParameterName = "ResultCode", Value = 0, Direction = ParameterDirection.Output };
var result = context.Database.SqlQuery("GetPersons @idx, @ResultCode out", param, output_param).AsQueryable();

var resultCode = (int)output_param.Value;

위도(Latitude)와 경도(Longitude) 값을 이용한 거리계산



public double GetDistance(double lat1, double lon1, double lat2, double lon2)
        {
            double theta, dist;
            theta = lon1 - lon2;
            
            dist = Math.Sin(deg2rad(lat1)) * Math.Sin(deg2rad(lat2)) + Math.Cos(deg2rad(lat1))
                 * Math.Cos(deg2rad(lat2)) * Math.Cos(deg2rad(theta));
            dist = Math.Acos(dist);
            dist = rad2deg(dist);

            dist = dist * 60 * 1.1515;
            dist = dist * 1.609344;    // 단위 mile 에서 km 변환.  
            dist = dist * 1000.0;      // 단위  km 에서 m 로 변환  

            return dist;
        }
        /// 
        /// 주어진 Degree 값을 Radian 값으로 변환
        /// 
        /// Degree
        /// Radian
        private double deg2rad(double deg)
        {
            return (double)(deg * Math.PI / (double)180d);
        }
        /// 
        /// 주어진 Radian 값을 Degree 값으로 변환
        /// 
        /// Radian value
        /// Degree
        private double rad2deg(double rad)
        {
            return (double)(rad * (double)180d / Math.PI);
        }