2015-08-24 66 views
6

我必须做一个搜索才能返回一个值,我必须做的就是乘以两个字段的总和。 我有以下代码:在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; 
} 

这是给下面的错误:

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

我怎么能返回该值?

+1

是'Projections'你的课还是属于nhibernate? (从未使用过的库) –

+0

[Expression.Lambda:变量'x'的类型''从范围''引用,但未定义]的可能重复(http://stackoverflow.com/questions/9778749/表达式 - lambda-variable-x-of-type-from-scope-but-it-is-n) –

+0

它是nhibernate @ScottChamberlain的一部分 –

回答

1

尝试做这样的事情在映射,使用公式。

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

试试这个

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