문제

전체 텍스트 검색을 수행하는 좋은 방법을 생각해낸 사람이 있습니까(FREETEXT() CONTAINS()) 표준 LinqToSql 쿼리 구문을 사용하여 임의의 수의 임의 키워드에 대해?

분명히 Stored Proc을 사용하거나 동적 SQL 호출을 생성해야 하는 것을 피하고 싶습니다.

분명히 FREETEXT() 또는 CONTAINS()를 사용하는 SPROC에 대한 매개변수의 검색 문자열을 펌핑할 수도 있지만 검색을 좀 더 창의적으로 수행하고 다음과 같은 쿼리를 작성하기를 바랐습니다.

'애플파이'가 아닌 '페퍼로니 피자'와 버거.

말도 안 되는 일이라는 걸 알아요. 하지만 LinqToSql에서 직접 이 작업을 수행할 수 있다면 정말 멋지지 않을까요?이를 달성하는 방법에 대한 조언을 주시면 감사하겠습니다.

업데이트:내 생각엔 내가 무슨 일을 하고 있는 것 같아 여기...

또한:제가 질문한 내용의 의미가 실제로 변경되었기 때문에 질문 제목에 대한 변경 사항을 롤백했습니다.나 알다 LinqToSql에서는 전체 텍스트 검색이 지원되지 않습니다. 알고 싶었다면 그 질문을했을 것입니다.대신 - 편집에 열광하는 대중을 달래기 위해 제목을 업데이트했습니다.

도움이 되었습니까?

해결책

불행하게도 LINQ to SQL은 전체 텍스트 검색을 지원하지 않습니다.

제가 생각하기에 다음과 같은 제품이 많이 있습니다.Lucene.NET, NHibernate Search가 떠오릅니다.NHibernate Search와 결합된 NHibernate용 LINQ는 아마도 해당 기능을 제공할 것이지만 둘 다 아직 베타 버전입니다.

다른 팁

테이블 값 함수를 사용하여 전체 텍스트 검색 구성 요소를 캡슐화한 다음 지연된 실행의 이점을 유지하면서 LINQ 식 내에서 이를 참조하여 이 문제를 해결했습니다.

string q = query.Query;
IQueryable<Story> stories = ActiveStories
                        .Join(tvf_SearchStories(q), o => o.StoryId, i => i.StoryId, (o,i) => o)
                        .Where (s => (query.CategoryIds.Contains(s.CategoryId)) &&
                                    /* time frame filter */
                                (s.PostedOn >= (query.Start ?? SqlDateTime.MinValue.Value)) &&
                                (s.PostedOn <= (query.End ?? SqlDateTime.MaxValue.Value)));

여기서 'tvf_SearchStories'는 내부적으로 전체 텍스트 검색을 사용하는 테이블 값 함수입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top