2013-06-27 2 views
0

방금 ​​LINQ에 대한 읽기를 시작했으며 저를 괴롭혔던 한 가지가 있습니다. LINQ는 LINQ 쿼리를 데이터베이스 서버에 해당 SQL 쿼리로 변환합니다. LINQ가 모든 코드를 SQL 문으로 변환 할 수 있을지 의심 스럽기 때문에 여기에 몇 가지 제한이 있다고 가정해야합니다.LINQ의 Where 절이 데이터베이스 쿼리의 where 절로 변환됩니다.

가능한 한 제한적으로 서버에 전송되는 쿼리를 가져 오려면 LINQ를 SQL로 변환하고 LINQ를 SQL로 변환 할 수없는 항목은 무엇입니까?

예를 들어 where employee.name == "Test"은 변환하기가 매우 쉽지만, where isEven(employee.number)은 어떨까요? 아니면 더 복잡한 무엇인가?

+2

LINQ는 표현식 트리를 SQL로 변환하므로 메서드 호출이 예외를 throw하는 것을 알 수 있습니다. 메서드의 무작위로 복잡한 논리를 변환 할 수 없습니다. 즉, LINQ가 인식하고 쉽게 변환 할 수있는 .NET 함수가 내장되어 있습니다. –

+0

@SimonWhitehead 고마워요, 그 말이 맞고 그 문제에 대한 제정신의 해결책처럼 들립니다. – confusopoly

답변

1

Here은 LINQ to SQL에서 지원하는 메서드에 대해 자세히 설명하는 MSDN 페이지입니다.

LINQ to SQL에서 메서드를 SQL로 변환하는 방법을 이해하지 못하기 때문에 식 트리에서 고유 한 메서드 호출을 사용할 수 없습니다.

일부 ORM (예 : NHibernate)을 사용하면 자신의 메서드에 대해 SQL (Hibernate의 경우 HQL)을 생성하기위한 자체 생성자를 정의 할 수 있습니다. L2S가이를 지원한다고 생각하지 않습니다.