2011-09-23 3 views
2

내 요구 사항은 IQueryable Join이 될 일반 조인 메서드를 구현하는 것입니다. 아래 그림과 같이LINQ 일반 조인 및 엔터티 프레임 워크

 var q = Join(e1, e2, "Company_ID", "Company_ID", 
     "new (outer.Company_ID as CompanyId)"  ); 

하지만 난 오류를 얻을 : 나는이 방법을 가입 사용한

public static IQueryable Join(this IQueryable outer, IEnumerable inner, string outerSelector, string innerSelector, string resultsSelector, params object[] values) 
    { 
     if (inner == null) throw new ArgumentNullException("inner"); 
     if (outerSelector == null) throw new ArgumentNullException("outerSelector"); 
     if (innerSelector == null) throw new ArgumentNullException("innerSelector"); 
     if (resultsSelector == null) throw new ArgumentNullException("resultsSelctor"); 

     System.Linq.Expressions.LambdaExpression outerSelectorLambda = DynamicExpression.ParseLambda(outer.ElementType, null, outerSelector, values); 
     System.Linq.Expressions.LambdaExpression innerSelectorLambda = DynamicExpression.ParseLambda(inner.AsQueryable().ElementType, null, innerSelector, values); 

     System.Linq.Expressions.ParameterExpression[] parameters = new System.Linq.Expressions.ParameterExpression[] { 
     System.Linq.Expressions.Expression.Parameter(outer.ElementType, "outer"), System.Linq.Expressions.Expression.Parameter(inner.AsQueryable().ElementType, "inner") }; 
     System.Linq.Expressions.LambdaExpression resultsSelectorLambda = DynamicExpression.ParseLambda(parameters, null, resultsSelector, values); 

     return outer.Provider.CreateQuery(
      System.Linq.Expressions.Expression.Call(
       typeof(Queryable), "Join", 
       new Type[] 
       { 
        outer.ElementType, 
        inner.AsQueryable().ElementType, 
        outerSelectorLambda.Body.Type, 

        resultsSelectorLambda.Body.Type 
       }, 
       outer.Expression, 
       inner.AsQueryable().Expression, 
       System.Linq.Expressions.Expression.Quote(outerSelectorLambda), 
       System.Linq.Expressions.Expression.Quote(innerSelectorLambda), 
       System.Linq.Expressions.Expression.Quote(resultsSelectorLambda))); 
    } 


    //The generic overload. 
    public static IQueryable<T> Join<T>(this IQueryable<T> outer, IEnumerable<T> inner, string outerSelector, string innerSelector, string resultsSelector, params object[] values) 
    { 
     return (IQueryable<T>)Join((IQueryable)outer, (IEnumerable)inner, outerSelector, innerSelector, resultsSelector, values); 
    } 

아래와 같이

아래 그림과 같이 내가 가입 방법을 사용했다

'System.Linq.Queryable'형식의 일반 메서드 '조인'이 제공된 형식 인수 및 인수와 호환됩니다. 메소드가 비 제네릭 일 경우 형식 인수가 제공되지 않아야합니다.

도와주세요.

+0

'Queryable'대신 'IQueryable'을 사용해보십시오. – Enigmativity

+0

잘 작동하지 않습니다. 오류는 'System.Linq.IQueryable'형식의 'Join'메서드가 없습니다. – Mahadesh

+0

'using System.Linq; '가 누락 되었습니까? –

답변

0
outerSelectorLambda.Body.Type 

Body.ReturnType이 아니어야합니까?


이 반환 문구가 너무 큽니다. 깨뜨리고 디버거로 유형을 살펴보십시오.

관련 문제