2014-02-24 1 views
2

JoinSqlBuilder를 사용하여 조인 된 테이블 중 하나에서 데이터를 선택하려고하는데 그 테이블의 모든 열을 나열하지 않으면이를 수행 할 방법을 찾을 수 없습니다. 잘하면 나는 뭔가를 놓치고 실제로 할 수 있습니다.명시 적으로 모든 열을 나열하지 않고 조인 된 테이블에서 열을 선택하는 방법이 있습니까?

var sql = new JoinSqlBuilder<Product, Product>() 
.Join<Product, Customer>(src => src.Id, dst => dst.Id) 
.Where<Customer>(x => x.Id == Id); 

을 나는 제품 테이블에서 모든 것을 선택합니다 :

이 내가 가지고있는 약입니다. 위의 쿼리는 열 이름 충돌에 대해 불평하는 예외를 throw하므로 명확하게 두 테이블에서 선택을 수행합니다.

편집 : OrmLite 날 명시 적으로 I 반환 할 모든 열을 나열 할 같은

select 
     p.* //<-- This is the piece that I'm struggling with 
    from product p inner join customer c on p.id on c.productId 
    where blah; 

가 보이는 : 결국 나는 (설계, 자사가 아닌 진짜를 신경 쓰지)이 SQL을 갖고 싶어 나는 그것을 피하고 싶다.

답변

2

참고 : 3.9.71 servicestack을 사용하고 있습니다. 4.0 구현을 아직 보지 않았습니다.

귀하의 조인에 FK 관계가 있다고 생각합니다. 제품에 고객 FK (CustID)라는 제품이 있다고 가정하면 다음과 같이 보일 것입니다. 또한 결과의 "조합"을 반환하는 경우 결과 집합을 나타 내기 위해 POCO가 필요합니다. 나는 "ID"열을 모두 반환하고 FK 열을 반환하려고하지 않을 것이라고 생각합니다.

return _factory.Run<ProductCustomer>(conn=> 
{ 
    var jn = new JoinSqlBuilder<Product, Customer>(); 

    jn = jn.Join<Product, Customer>(srcProd => srcProd.CustId, 
     dstCust => dstCust.Id, // set up join Customer.id -> Product.CustId 
     p => new { p.Id, p.OtherField}, // product table fields returned 
     c => new { c.Name, c.AddressId}, // customer fields returned 
     null, //where clause on the product table 
     cust=>cust.Id = customerId // where clause on the customer table 
    ); 

    var sql = jn.ToSQL(); 

    return conn.FirstOrDefault<ProductCustomer>(sql); 
} 

희망이 있습니다.

편집 : 당신의 편집 후,이 시도 : 당신이 당신의 BLAH 더 많은 제품을 추가해야하는 경우

// set up join Customer.id -> c.ProductId 
    jn = jn.Join<Product, Customer>(srcProd => srcProd.Id, dstCust => dstCust.productId) 
     .Where<Customer>(c=>c.Id == custIdParameter); 
    var sql = jn.ToSql(); 

당신은

Where<Product>(p=>p.id == foo); 

을 위해 다시 "어디에요"를 추가 할 수 있습니다. 이것은 당신을 가까이해야합니다.

+0

음, 아니요, 관련 외래 키가 없습니다. 테이블이 꽤 크기 때문에 p> new {p.Id, p.OtherField}가 있습니다. 내가 원하는 결과 SQL을 표시하는 질문을 편집합니다. – Evgeni

+0

수정 사항이 추가되었습니다. 희망이 도움이됩니다. "ㅋㅋ"가 아직 알려지지 않았기 때문에 더 많이 추가 할 수 있습니다. 필요에 따라 – realPT

1

SelectAll 확장 방법을 사용해 보셨습니까?

var sql = new JoinSqlBuilder<Product, Product>() 
.Join<Product, Customer>(src => src.Id, dst => dst.Id) 
.SelectAll<Product>() 
.Where<Customer>(x => x.Id == Id); 
관련 문제