1

I have this SQL query :

select pr.*, det.Description, det.Name 
from Product pr 
inner join ProductDetail det on det.Product_id = pr.id
where pr.Id = XX and det.IsDefault = yy

How can I do this with QueryOver ?

Thanks,

Update :

public ProductMap()
{
    Id(x => x.Id).GeneratedBy.Native();
    Map(x => x.Code)
        .Length(20)
        .Not.Nullable();
    Map(x => x.CreationDate).Not.Nullable();
    Map(x => x.IsDeleted);
    Map(x => x.Price);
    HasManyToMany(x => x.Categories)
        .AsSet()
        .Cascade
        .SaveUpdate()
        .Table("ProductsCategories");
}

public class ProductDetailMap : ClassMap<ProductDetail>
{
    public ProductDetailMap()
    {
        Id(x => x.Id).GeneratedBy.Native();
        Map(x => x.Name)
            .Length(50)
            .Not.Nullable();
        Map(x => x.Description)
            .Length(250);
        Map(x => x.IsDefault);
        References(x => x.Language);
        References(x => x.Product);
    }
}
2
  • What type are you trying to get out? Commented Jul 18, 2012 at 22:32
  • @AndrewWhitaker An anonymous type. Commented Jul 19, 2012 at 3:42

1 Answer 1

2

As far as I know QueryOver has no equivalent of the "pr.*" part, which would be nice. Which means you would have to manually specify each property of pr in your query.

See the section "Projections" on the document here

But it would be something like:

Product productAlias = null;
ProductDetail productDetail = null;
var query = session.QueryOver(() => productAlias)
                     .Inner.JoinAlias(() => productAlias.ProductDetails, () => productDetail)
                     .Where(() => productAlias.Id == XX && productDetail.IsDefault == YY)
                     .SelectList(list => list
                         .Select(() => productAlias.Id)
                         .Select(() => productAlias.Property1)
                         .Select(() => productAlias.Property2) 
                         // and so on...
                         .Select(() => productDetail.Description)
                         .Select(() => productDetail.Name)
                      );

// One way of doing it... 
// Will give you a list of object arrays matching the result
var results1 = query.List<object[]>();

// Another way...
// You need to define a class that has all the properties your are querying for
// If we create a class like that called "MySummaryClass" you can do:
var results2 = query.TransformUsing(Transformers.AliasToBean<MySummaryClass>()).List<MySummaryClass>();
Sign up to request clarification or add additional context in comments.

1 Comment

Well well, It's easier to do two queries and then use linq after to merge both, that's work fine

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.