2009-05-11 4 views
3

나는 쿼리 SQL (SQL에 Linq을 사용하고 있지만 고전적인 SQL 쿼리를 실행하고있다)을 실행하는 방법이 있지만,이 쿼리가 생성 될 테이블/엔티티를 모르겠습니다.형식을 알지 못하고 C# 3.0에서 IQueryable을 반환하려면 어떻게해야합니까?

따라서 테이블에서 쿼리를 생성 할 때 어떤 테이블인지 알 수 없기 때문에 IQueryable의 형식을 알지 못합니다. 그렇습니까?

그러나 이것을 반환하는 방법을 모르겠다. IQueryable? <T>을 반환하려고했지만 작동하지 않습니다.

감사합니다.

답변

1

당신은 방법 내부 IQueryable<T>를 구축하고 다음 방법은 일반적인 만들 수 있습니다에게 도움이됩니다. 이렇게하면 IQueryable<T>을 직접 반환 할 수 있고 C# 컴파일러는 형식 추론을 사용하여 컴파일시에 T이 무엇인지 확인할 수 있습니다. Linq 연산자는 Extension 메서드로 구현되는 경우를 제외하고는 대부분 구현됩니다.

예를 들어, 제거하는 방법을 고려하는 것이 유형의 기본입니다 그 목록에있는 : 당신이 형식 유추를 알아낼 수 있기 때문에 당신이 <T>을 남길 수 있습니다 C#에서이 전화를 지금

public static IQueryable<T> FilterDefaults<T>(IQueryable<T> theSet) 
{ 
    IQueryable<T> query = 
     from t in theSet 
     where t != default(T) 
     select t; 

    return query; 
} 

컴파일시 T은 여전히 ​​강력한 형식의 수 :

string[] myStrs = { "ABC", null, "", "123", null, "XYZ" }; 
var theFilteredStrs = FilterDefaults(myStrs); 
// should represent the sequence: "ABC", "", "123", "XYZ" 
// note null is missing because default(string) is null 

int[] myNums = { -1, 0, 3, 0, 42 }; 
var theFilteredNums = FilterDefaults(myNums); 
// should represent the sequence: -1, 3, 42 
// note 0 is missing because default(int) is 0 

이것은 기본적인 유형을 사용하는 간단한 예제이지만 아이디어는 힘있는 (LINQ - 투 - SQL 포함) LINQ 사용에 대한 동일하게 작동 LINQ. 궁극적으로 LINQ-to-SQL을 사용할 것인지 또는 LINQ-to-Objects 일지는 신경 쓰지 않습니다.

0

당신은 알 수 없습니다. 당신이 타입을 모르기 때문에 일반 Generic (즉, List)을 리턴 할 방법이 없다. 당신이하고있는 일에 대해서만 다른 옵션을 사용할 수있다. (또한 언제든지 강한 Linq의 서브 세트를 Sql 타입으로 반환하기를 원할 때) 자신의 유형 (즉, 클래스 또는 구조체)을 만들고 List를 채우고 반환하는 것입니다. 반환하려는 열에 대한 아이디어가있는 것 같아서 너무 어렵지 않아야합니다.

희망이 탭

관련 문제