2012-03-07 4 views
5

हाय करने के लिए नक्शे मैं इसnhibernate में एक कस्टम क्वेरी निष्पादित और एक कस्टम डोमेन वस्तु

SELECT Customer.Name, sum([Load].Profit) as Profit FROM Customer INNER JOIN [Load] ON Customer.Id = [Load].CustomerId GROUP BY Customer.Name 

मैं nhibernate में इस क्वेरी निष्पादित और एक कस्टम डोमेन वस्तु जो मैं के रूप में बनाया करने के लिए इसे मैप करने की आवश्यकता की तरह एक प्रश्न है इस तरह

public class CustomerProfit 
    { 
     public String Name; 
     public Decimal Profit; 

    } 

क्या ऐसा करना संभव है? और कैसे, या एचक्यूएल में इस कस्टम क्वेरी को निष्पादित करना संभव है?

+1

आप क्या करना चाहते हैं: क) कस्टम एसक्यूएल और अधिक काम करने की है, लेकिन परिवर्तन ट्रैकिंग और सामान – Firo

+0

आवश्यकता के रूप में के साथ इकाई के रूप में resulttransformer लेकिन कोई changetracking ख) मानचित्रण के साथ कम से कम काम मैं मैं पसंद करते हैं एक :-) – Sudantha

+0

देखें लगता है यह उत्तर http://stackoverflow.com/questions/5964147/map-sql-query-to-business-object-in-nhibernate शायद आपके लिए सहायक हो;) – Gholamreza

उत्तर

14
public sealed class CustomerProfitQuery : IResultTransformer 
{ 
    public static readonly string Sql = "SELECT Customer.Name, sum([Load].Profit) as Profit FROM Customer INNER JOIN [Load] ON Customer.Id = [Load].CustomerId GROUP BY Customer.Name"; 
    public static readonly CustomerProfitQuery Transformer = new CustomerProfitQuery(); 

    // make it singleton 
    private CustomerProfitQuery() 
    { } 

    public IList TransformList(IList collection) 
    { 
     return collection; 
    } 

    public object TransformTuple(object[] tuple, string[] aliases) 
    { 
     return new CustomerProfit 
     { 
      Name = (string)tuple[0], 
      Profit = (decimal)tuple[1], 
     }; 
    } 
} 


// usage 
var customerprofits = session.CreateSQLQuery(CustomerProfitQuery.Sql) 
    .SetResultTransformer(CustomerProfitQuery.Transformer) 
    .List<CustomerProfit>() 
+1

Gr8 ... पूरी तरह से मेरे लिए काम कर रहा है .. जीआर 8 समाधान .. –

संबंधित मुद्दे