2009-06-22 9 views
4

어떻게 클래스 형식을 C#의 함수에 전달합니까? DB4O에서 유형별로 쿼리하기

내가 db4o는 및 C#으로 점점 오전으로

나는 튜토리얼을 읽은 후 다음 함수를 썼다 :

public static void PrintAllPilots("CLASS HERE", string pathToDb) 
    { 
     IObjectContainer db = Db4oFactory.OpenFile(pathToDb); 
     IObjectSet result = db.QueryByExample(typeof("CLASS HERE")); 
     db.Close(); 
     ListResult(result); 
    } 

답변

11

두 가지 방법이 있습니다. 첫 번째는 명시 적으로 Type 유형을 사용하는 것입니다.

public static void PrintAllPilots(Type type, string pathToDb) 
{ 
    ... 
    IObjectSet result = db.QueryByExample(type); 
} 

PrintAllPilots(typeof(SomeType),somePath); 

두 번째

수동 Type를 사용하여 제네릭

public static void PrintAllPilots<T>(string pathToDb) 
{ 
    ... 
    IObjectSet result = db.QueryByExample(typeof(T)); 
} 

PrintAllPilots<SomeType>(somePath); 
+0

나를 제네릭으로 때려. 어떤 종류의 db에 저장된 보너스 재사용 성을 제공합니까? –

1

나는 이것이 당신이 원하는 생각 :

public static void PrintAllPilots(Type classType, string pathToDb) 
{ 
    IObjectContainer db = Db4oFactory.OpenFile(pathToDb); 
    IObjectSet result = db.QueryByExample(classType); 
    db.Close(); 
    ListResult(result); 
} 
0

당신은 그것을 할 수 있습니다를 사용하는 것입니다 :

public static void PrintAllPilots(Type type, string pathToDb) 

을 또는 당신은 유형 추론하는 제네릭을 사용할 수

public static void PrintAllPilots<T>(string pathToDb) 
{ 
    //... 
    var result = db.QueryByExample(typeof(T)); 
} 
5

Jon, Jared 및 yshuditelu가 제공 한 응답은 주로 사용되지 않는 DB4o 쿼리 메커니즘 인 쿼리를 사용하며 이후에 비추천 될 수 있습니다.

.NET 용 DB4O를 쿼리하는 기본 방법은 기본 쿼리와 LINQ입니다. Linq에 - 투 - db4o는을 사용하여

// Query for all Pilots using DB4O native query: 
var result = db.Query<Pilot>(); 

또는 대안 :

// Query for all Pilots using LINQ 
var result = from Pilot p in db 
      select p; 

이 두 작품의 당신은 컴파일시에 유형 (예를 들어, 파일럿)을 알고 제공. 당신이 컴파일시에 유형을 모르는 경우, 당신은 대신 db4o는 SODA 쿼리를 사용할 수 있습니다 대신 SODA의 LINQ를 사용하는 이유

var query = db.Query(); 
query.Constrain(someObj.GetType()); 
var results = query.Execute(); 

편집을 예제 별 조회 (QBE), 또는 기본 쿼리 (NQ)? LINQ는 쿼리 식을 처리하는 것이 매우 자연 스럽기 때문입니다.

var michaelPilots = from Pilot p in db 
        where p.Name == "Michael" 
        select p; 

그리고 LINQ 작성 가능,이 같은 일을 할 수 있음을 의미한다 :

var first20MichaelPilots = michaelPilots.Take(20); 

을 그리고 당신은 여전히 ​​효율적인 쿼리를 얻을 수 있습니다 예를 들어, 여기 당신이 마이클이라는 조종사를 쿼리 줄 방법 결과를 반복 할 때 DB4O에서 실행됩니다. SODA 또는 QBE 또는 NQ에서 동일하게 수행하는 것은 좋지 않습니다.

+0

저는 이미 LINQ와 함께 작업했으며 모든면에서 눈 사탕임을 인정해야합니다. 네이티브 쿼리를 다음 단계로 활용할 것입니다. 조언 해주셔서 감사합니다! –

+0

LINQ가 바람직한 이유를 설명하기 위해 게시물을 수정했습니다. –

관련 문제