2011-08-30 2 views
2

Linq를 사용하여 Contains(field,value) SQL Server 함수를 호출하려면 어떻게해야합니까? Entity Framework 호출 데이터베이스 Linq를 사용하는 SQL 문자열 함수?

var result = context.Documents.Where(d => d.SomeField.Contains(param)).ToList(); 

생성 된 SQL 쿼리에 Contains 기능을 사용하지 않습니다 : 같은 일을

. 필드는 전체 텍스트 검색이 활성화 된 텍스트 필드입니다.

프레임 워크의 어딘가에 이미 매핑 된 일부 SQL Server 문자열 함수가 있어야한다는 것을 알고 있습니다. Contains 중 하나이며 어디에서 찾을 수 있습니까?

답변

1

상점 기능을 사용해 볼 수 있습니다. Ladislav Mrnka는 그들에 대해 this question에 잘 설명합니다.

기본적으로 Contains를 EDMX에 정의하고 EF가 SQL Server가 이해할 수있는 대상에 매핑하는 방법을 알려줍니다 (참고 :이 예제에서는 FullTextContains을 C#의 Contains 메서드와 혼동하지 않도록 호출합니다. 이) 필요가 아닌지 '는 잘 모르겠어요 :

public static class EdmFunctions 
{ 
    [EdmFunction("YourModel", "FullTextContains")] 
    public static string FullTextContains(string field, string value) 
    { 
     throw new NotSupportedException("This function is only for L2E query."); 
    } 
} 

은 그럼 당신은 사용할 수 있습니다 : 당신이 Linq를 통해 호출 할 수 있도록

그런 다음
<Function Name="FullTextContains" ReturnType="Edm.String"> 
    <Parameter Name="field" Type="Edm.String" /> 
    <Parameter Name="value" Type="Edm.String" /> 
    <DefiningExpression> 
    Contains(field, value) 
    </DefiningExpression> 
</Function> 

당신이 C#에서 스텁 방법을 그 방법은 Linq 쿼리와 EF에서 올바르게 번역해야합니다.

+0

어떤 이유에서인지, 나는 매개 변수와 하드 코드 된 상수를 정의 식으로 제거하려고 시도했으나 여전히 생성 된 sql이 잘못되었다고 말하고 있습니까? –

+1

SQL 서버의'CONTAINS'는 함수가 아니기 때문에 폭발 할 것으로 예상됩니다. 그것은 술어입니다. 그것을 사용자 정의 함수로 감싸십시오. –

관련 문제