2009-10-01 5 views
3

제네릭에 상당히 익숙해 져서 다음 문제에 대해 누군가 설명 할 수 있는지 궁금합니다. ASP.NET MVC 애플리케이션의 거의 모든 컨트롤러에서 사용자가 특정 필터링 기준을 지정한 위치에서 JqGrid를 채우기 위해 필터링 된 목록을 반환해야합니다. 각 컨트롤러 목록 메서드는 다른 IQueryable 목록을 반환하므로이를 처리 할 일반 메서드를 만드는 방법을 설정했습니다.형식 인수를 사용에서 유추 할 수 없습니다

필자가 만든 메서드를 만들면서 특정 컨트롤러에 정의했습니다. 컴파일 된 모든 것이 예상 한 결과를 얻었습니다. 모든 컨트롤러에서이 메서드를 호출하기를 원하기 때문에 단순히 다른 정적 클래스를 만들 수 있다고 가정하고 메서드를 넣은 다음 모든 메서드에서 해당 메서드를 호출합니다. 방법 System.Linq.Queryable.Where<TSource>(System.Linq.IQueryable<TSource>, System.Linq.Expressions.Expression<System.Func<TSource,bool>>) 에 대한

유형의 인수에서 추론 할 수 없습니다 컨트롤러 그게 전부가 호출하는 것보다 내가 다른 곳에서는 다른 방법을 이동하려고한다면, 컴파일러는 다음과 같은 오류와 방법의 마지막 줄에 대해 불평 사용법. 형식 인수를 명시 적으로 지정하십시오.

public static IQueryable<T> FilteredList<T>(IQueryable<T> list, string filters) 
{ 
    var qb = new QueryBuilder<T>(); 
    var whereClause = qb.BuildWhereClause(filters); 
    return list.Where(whereClause); 
} 

내가 잘못된거야 어디 사람이 나에게 설명 할 수 list<T>.Where(whereClause)list.Where<T>(whereClause) 및 거의 모든 다른 조합을 시도했습니다.

+1

qb.BuildWhereClause는 무엇을 반환합니까? 표현 >? –

+0

'Where '이 효과가 있다고 생각할 것입니다. – Joren

+0

' (T)'를 사용하면 어떤 오류 메시지가 나타 납니까? 또한'whereClause'의 정확한 실제 유형은 무엇입니까? –

답변

8

귀하의 BuildWhereClause 메서드가 해당 유형을 반환하지 않음을 나타냅니다.

컴파일러가 TSource 유형을 listwhereClause에서 유추하려고합니다. 지금 whereClause이어야합니다. Expression<Func<T, bool>>이 되겠지만 그렇지 않다고 생각합니다. varwhereClause에 가져가 실제 위치를 확인하십시오. 반환 유형이 분명하지 않은 경우 var을 사용하지 않는 것이 좋습니다.

+0

Jon, 내 다른 게시물 BuildWhereClause에서 볼 수 있듯이, 동적 Linq를 사용하고 있기 때문에 Jon, 답장을 보내 주셔서 감사합니다. 현재 올바르게 작동하고 있습니다. 확실하지 않은 리턴 타입에 대해 var를 사용하지 않는다는 것에 대한 좋은 점은 앞으로 더 명확하게하려고 노력할 것입니다. 추신 그런데 깊이있는 책을 C#으로 사랑해. –

관련 문제