2015-08-24 7 views
6

Ich muss eine Suche durchführen, um einen Wert zurückzugeben, ich muss die Summe der Multiplikation zweier Felder tun. Ich habe den folgenden Code:Machen Sie eine Multiplikation in einer 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; 
} 

Es wird die folgende Fehlermeldung geben:

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

Wie kann ich diesen Wert zurückgeben?

+1

Ist 'Projektionen' Ihre Klasse oder ist es Teil von Nhibernate? (Niemals die Bibliothek verwendet) –

+0

mögliches Duplikat von [Expression.Lambda: Variable 'x' vom Typ '' referenziert vom Geltungsbereich '', aber es ist nicht definiert] (http://stackoverflow.com/questions/9778749/expression- lambda-variable-x-of-type-referenziert-von-scope-but-it-is-n) –

+0

Sein Teil von nhibernate @ScottChamberlain –

Antwort

1

Versuchen zu tun Formel.

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

diese so etwas wie dies in der Abbildung, versuchen

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))));