복붙노트

[SQL] 단정를 사용하면 5 개 이상 유형의지도로

SQL

단정를 사용하면 5 개 이상 유형의지도로

저는 현재 함께 12 개 테이블을 조인 SELECT 쿼리를 구축하고있다. 내 모든 다른 쿼리에 대한 단정을 사용하고 그것을 잘 작동합니다. 문제는 일반적인 방법은 다섯 개 일반적인 매개 변수가있다.

나는 이전에 다른 쿼리에 대해 6를 지원하는 코드를 수정했지만, 지금은 정말 제네릭의 6 이상의 레벨을 해킹해야한다고 생각하지 않습니다.

형식의 배열 날씬한 전달하는 방법이, 그리고 내가 필요하다면 나는 수동으로 캐스팅 수있는 개체의 배열로 결과를 반환?

또한 문제를 잘못된 방향으로 접근 될 수있다! 어떤 도움을 주시면 감사합니다!

해결법

  1. ==============================

    1.프로젝트에서 나는 7 개 이상의 유형 매핑 얻기 위해 다음과 같은 I 톱 뭔가 일했다. 우리는 말끔 1.38 사용 :

    프로젝트에서 나는 7 개 이상의 유형 매핑 얻기 위해 다음과 같은 I 톱 뭔가 일했다. 우리는 말끔 1.38 사용 :

    connection.Query<TypeOfYourResult>
    (
       queryString,
       new[]
       {
          typeof(TypeOfArgument1),
          typeof(TypeOfArgument2),
          ...,
          typeof(TypeOfArgumentN)
       },
       objects =>
       {
          TypeOfArgument1 arg1 = objects[0] as TypeOfArgument1;
          TypeOfArgument2 arg2 = objects[1] as TypeOfArgument2;
          ...
          TypeOfArgumentN argN = objects[N] as TypeOfArgumentN;
    
         // do your processing here, e.g. arg1.SomeField = arg2, etc.
         // also initialize your result
    
         var result = new TypeOfYourResult(...)
    
         return result;
       },
       parameters,
       splitOn: "arg1_ID,arg2_ID, ... ,argN_ID"
    );
    

    쿼리 문자열은 자명하다. splitOn 매개 변수는, 그 모든 것이 객체에 제대로 매핑 할 수 있도록 말끔가 SELECT 문에서 열을 분할하는 방법을 말한다 당신은 여기에 대해 읽을 수 있습니다.

  2. ==============================

    2.당신은 동적 쿼리를 사용하고 나중에 그것을 매핑 할 수 있습니다. 이 같은

    당신은 동적 쿼리를 사용하고 나중에 그것을 매핑 할 수 있습니다. 이 같은

    var result = conn.Query<dynamic>(query).Select(x => new Tuple<Type1, Type2, Type3, Type4, Type5>( 
    // type initialization here 
        new Type1(x.Property1,x.Property2),
        new Type2(x.Property3,x.Property4),
        new Type3(x.Property5,x.Property6) etc....));
    

    편집 : 오히려 큰 결과 집합으로, 또 다른 옵션은 여러 쿼리를 사용하고 그리드 리더를 사용하는 수 있습니다. 그것은 당신을 위해 일한다 수도 있습니다.

    날씬한 시대에서 가져온 예제가있다 :

    var sql = 
    @"
    select * from Customers where CustomerId = @id
    select * from Orders where CustomerId = @id
    select * from Returns where CustomerId = @id";
    
    using (var multi = connection.QueryMultiple(sql, new {id=selectedId}))
    {
       var customer = multi.Read<Customer>().Single();
       var orders = multi.Read<Order>().ToList();
       var returns = multi.Read<Return>().ToList();
       ...
    } 
    
  3. ==============================

    3.이것은 오래 전에 대답했습니다,하지만 난 여기에 내 두 센트를 추가하고 싶습니다. 대신 수동으로 말끔의 소스 코드를 수정, 왜 당신은 그 필드가 마시고 클래스를 생성하지 않고 테이블처럼 쿼리를 사용?

    이것은 오래 전에 대답했습니다,하지만 난 여기에 내 두 센트를 추가하고 싶습니다. 대신 수동으로 말끔의 소스 코드를 수정, 왜 당신은 그 필드가 마시고 클래스를 생성하지 않고 테이블처럼 쿼리를 사용?

    매핑은 나는 그 클래스 정의를 할 수도 고통이지만, 나중에 말끔의 업데이트를 다루는 것보다 쉬운 것 알고, 벌금을 작동합니다.

  4. from https://stackoverflow.com/questions/10202584/using-dapper-to-map-more-than-5-types by cc-by-sa and MIT license