[SQL] LINQ 쿼리의 SQL 사용자 정의 함수를 호출
SQLLINQ 쿼리의 SQL 사용자 정의 함수를 호출
나는 힘든 시간을 일이 점점 데. 나는 된 IQueryable에 다음과 같은 필터 도우미를 사용하여 반경 검색을 수행하려합니다. RadiusSearch 적용 전에 적용받을 다른 필터의 세트가있다. 목표는 조회가 ToList () 작업까지 연기 할 얻을 때문에 순서는별로 중요하지 않아야합니다.
public static IQueryable<ApiSearchCommunity> RadiusSearch(this IQueryable<ApiSearchCommunity> communities)
{
var centerLatitude = 30.421278;
var centerLongitude = -97.426261;
var radius = 25;
return communities.Select(c => new ApiSearchCommunity()
{
CommunityId = c.CommunityId,
City = c.City,
//Distance = c.GetArcDistance(centerLatitude, centerLongitude, c.Latitude, c.Longitude, radius)
});
}
어떻게 든 다시 SQL에 UDF 호출하는 위 GetArcDistance 같은 도우미를 쓸 수 있습니까? 내가 생성하기 위해 노력하고 쿼리는 다음과 같다
SELECT
comms.community_id,
comms.city,
comms.distance
FROM (
SELECT
c.community_id,
c.city,
dbo.udf_ArcDistance(
30.421278,-97.426261,
c.community_latitude,
c.community_longitude
) AS distance
FROM communities c) AS comms
WHERE comms.distance <= 25
ORDER BY comms.distance
해결법
-
==============================
1.좋아, 내가 질문을 이해 생각 - 그것의 요점은 당신이 당신의 Linq에 엔티티에 대한 쿼리의 일환으로 SQL UDF를 호출 할 수 있도록하려는 것입니다.
좋아, 내가 질문을 이해 생각 - 그것의 요점은 당신이 당신의 Linq에 엔티티에 대한 쿼리의 일환으로 SQL UDF를 호출 할 수 있도록하려는 것입니다.
먼저 데이터베이스 모델을 사용하는 경우입니다 :
이 문서에서는 작업을 수행하는 방법에 대해 설명 : http://msdn.microsoft.com/en-us/library/dd456847(VS.100).aspx
그것을 요약하면, 당신에게 edmx에서 XML 편집기에서 edmx 파일 편집에 대한 최초의 필요성 : 당신은 당신의 SQL UDF에 매핑을 지정해야합니다 StorageModels >> 스키마 부분, 예를 들어,
<Function Name="SampleFunction" ReturnType="int" Schema="dbo"> <Parameter Name="Param" Mode="In" Type="int" /> </Function>
그럼 당신은 그것에 EdmFunction 속성이 같은 뭔가 정적 기능 어딘가를 작성해야합니다 :
public static class ModelDefinedFunctions { [EdmFunction("TestDBModel.Store", "SampleFunction")] public static int SampleFunction(int param) { throw new NotSupportedException("Direct calls are not supported."); } }
이 방법은 엔티티 프레임 워크에 의해 쿼리 시간에 UDF에 매핑 얻을 것이다. 첫 번째 속성 인수는 저장 공간 - 당신은 스키마 요소에 대한 당신의 edmx XML 파일 (네임 스페이스에 대한보기)에서이를 찾을 수 있습니다. 두 번째 인수는 UDF의 이름입니다.
그런 다음이 같은 호출 할 수 있습니다 :
var result = from s in context.UDFTests select new { TestVal = ModelDefinedFunctions.SampleFunction(22) };
도움이 되었기를 바랍니다.
-
==============================
2.여기 증거, 또 다른 하나 - 당신은 코드 - 첫 번째 접근 방식을 사용하는 경우 (EF6 현재) 원하는대로, 당신은 UDF를 호출 할 수 없습니다. 당신은 당신의 SQL 쿼리의 일환으로 UDF를 호출 제한됩니다 :
여기 증거, 또 다른 하나 - 당신은 코드 - 첫 번째 접근 방식을 사용하는 경우 (EF6 현재) 원하는대로, 당신은 UDF를 호출 할 수 없습니다. 당신은 당신의 SQL 쿼리의 일환으로 UDF를 호출 제한됩니다 :
bool result = FooContext.CreateQuery<bool>( "SELECT VALUE FooModel.Store.UserDefinedFunction(@someParameter) FROM {1}", new ObjectParameter("someParameter", someParameter) ).First();
이는 IMO 추한 및 오류가 발생하기 쉬운입니다.
또한 -이 MSDN 페이지는 말한다 :
이는 기본적으로 당신이 전화 UDF에에 모델 첫 번째 방법을 사용 할 필요가 있다는 것을 의미합니다.
from https://stackoverflow.com/questions/20131632/calling-a-sql-user-defined-function-in-a-linq-query by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 쿼리에 대한 행 번호를 얻기 (0) | 2020.05.21 |
---|---|
[SQL] (SQL의 28 개 라인을 작성하지 않고도) 28 일 슬라이딩 윈도우 집계에 대한 BigQuery의 SQL (0) | 2020.05.21 |
[SQL] 나무 테이블에 대한 SQL 쿼리 (0) | 2020.05.21 |
[SQL] 어떻게 열 값을 기준으로 연속 행을 찾는 방법은? (0) | 2020.05.21 |
[SQL] SQL Server의 7 일 롤링 평균에 대한 SQL 쿼리 (0) | 2020.05.21 |