2009-04-15 6 views
3
및 확장 방법

내 확장 방법은 다음과 같습니다LINQ - 투 - SQL 하위 쿼리

public static IEnumerable<T> FilterCultureSubQuery<T>(this Table<T> t) 
    where T : class 
    { 
     return t; 
    } 

내 메소드의 서명이 있어야하는데 이것이 쿼리

var test = from p in t.Products 
      select new 
      { 
       Allo = p, 
       Allo2 = (from pl in t.ProductLocales.FilterCultureSubQuery() 
         select pl) 
      }; 

에서 그것을 사용하려 신장? 나는 또한이 서명 시도

 
Method 'System.Collections.Generic.IEnumerable`1[ProductLocale] FilterCultureSubQuery[ProductLocale](System.Data.Linq.Table`1[ProductLocale])' has no supported translation to SQL. 

: 난 항상이 오류를 얻을

public static IQueryable<T> FilterCultureSubQuery<T>(this Table<T> t) 
    where T : class 
    { 
     return t; 
    } 

을 그리고이 오류가있어 :

 
Method 'System.Linq.IQueryable`1[ProductLocale] FilterCultureSubQuery[ProductLocale](System.Data.Linq.Table`1[ProductLocale])' has no supported translation to SQL. 

주셔서 감사 방법의 서명이

답변

1

간단한 쿼리에서 내 확장 메서드를 사용할 때 작동하지만 하위 쿼리에서 사용할 때 작동하지 않습니다. 어떤 해결책?

var test = from p in t.Products 
      select new 
      { 
      Allo = p, 
      Allo2 = (from pl in t.ProductLocales.FilterCultureSubQuery() 
         select pl) 
      }; 

내가 새로운 확장 메서드를 생성하고 쿼리 식 트리를 다시

var test = from pl in t.ProductLocales.FilterCultureSubQuery() select pl; 

작동하지 작업.

var test = (from p in t.Products 
       select new 
       { 
       Allo = p, 
       Allo2 = (from pl in t.ProductLocales.FilterCultureSubQuery() 
          select pl) 
       }).ArrangeExpression(); 

LINQ-TO-SQL은 서브 쿼리의 확장 방법을 사용하는 데 어려움이있다. 식을 확장하는 재 작성 방법으로 모든 것이 잘 작동합니다.

다른 해결책이 있습니까?

4

을 벌금. 문제는 명시된 바와 같이 "SQL에 대한 지원되는 변환이 없습니다"입니다.

DLINQ는 해당 문을 데이터베이스로 보낼 SQL 행으로 변환하려고 시도하고 있습니다. 이 방법은 번역이 없습니다.

Where 절을 사용하여 필터를 다시 작성하는 것이 좋습니다.

2

확장 방법에 문제가 없습니다.

LINQ-To-SQL 쿼리에서 사용자 지정 메서드를 사용하려고하고 해당 메서드에 대한 LINQ-To-SQL에서 SQL 로의 변환을 알지 못하기 때문에 예외가 발생합니다. 따라서 LINQ 표현식에서 SQL 쿼리를 생성 할 수 없습니다.

해결책은 데이터를 먼저 가져온 다음 변환을 적용하는 것입니다.