2015-08-24 17 views
6

Muszę wykonać wyszukiwanie, aby zwrócić wartość, muszę zrobić to suma mnożenia dwóch pól. Mam następujący kod:Wykonaj mnożenie w SQL

internal double TotalRes(long Id) 
{ 
    double total = 0; 
    Reserve rAlias = null; 
    var query = Session.QueryOver<Item>(); 
    query = query.JoinAlias(e => e.Reserve,() => rAlias); 
    query = query.Where(() => rAlias.Id == Id); 
    query = query.Select(Projections.Sum<Item>(acct => acct.Ammount * acct.Wight)); 
    object result = query.UnderlyingCriteria.UniqueResult(); 
    if (result != null) 
     total = Convert.ToDouble(result); 
    return total; 
} 

To daje następujący błąd:

the variable 'acct' type 'tem' is referenced in scope '', but it is not set

Jak mogę zwrócić tę wartość?

+1

Czy 'Projekcje' są twoją klasą czy jest częścią nhibernate? (Nigdy nie używał biblioteki) –

+0

możliwy duplikat [Expression.Lambda: Zmienna 'x' typu '', do którego odwołuje się z zakresu '', ale nie jest zdefiniowany] (http://stackoverflow.com/questions/9778749/expression- lambda-variable-x-of-type-referced-from-scope-but-it-is-n) –

+0

Jego część nhibernate @ScottChamberlain –

Odpowiedz

1

spróbować zrobić coś takiego w mapowaniu, stosując formułę.

Map(c => c.total).formula("(select sum(Ammount * Wight) from acct)"); 
1

Spróbuj

Item rItem = null; 
var query = Session.QueryOver<Item>(() => rItem); 
... 
query = query.Select(Projections.Sum(
     Projections.SqlFunction(new VarArgsSQLFunction("(", "*", ")"), 
     NHibernateUtil.Double, 
     Projections.Property(() => rItem.Ammount), 
     Projections.Property(() => rItem.Wight))));