0

我有 2 张桌子
  1. 客户
  2. 操作

操作可能导致: 贷方或借方(字符字段中的“C”或“D”)以及日期和金额字段。

我必须使用 linQ 计算每个客户帐户的余额...对于尚未进行操作的客户,结果还应显示余额 0

我有以下带有 linQ 语句的函数,但我知道它可以以更好、更快、更短的方式完成,对吧?哪个会?

public static double getBalance(ref ClasesDeDatosDataContext xDC, string SSN,
int xidClient)
{
    var cDebits =
        from ops in xDC.Operations
                where (ops.idClient == xidClient) && (ops.OperationCode == 'D')
                select ops.Ammount;
    var cCredits =
                from ops in xDC.Operations
                where (ops.idClient == xidClient) && (ops.OperationCode == 'C')
                select ops.Ammount;
    return (double)(cCredits.Sum() - cDebits.Sum());
}

谢谢 !!!

4

1 回答 1

0

我不知道 LINQ-to-SQL 引擎是否可以处理表达式,但应该可以这样:

return (
  from ops in xDC.Operations
  where ops.idClient == xidClient
  select ops.operationCode == 'C' ? ops.Amount : -ops.Amount
).Sum(a => a);

也许:

return (
  from ops in xDC.Operations
  where ops.idClient == xidClient
  select new { Sign = ops.operationCode == 'C' ? 1.0 : -1.0, Amount = ops.Amount }
).Sum(o => o.Sign * o.Amount);

如果集合为空,Sum 方法返回零,这样就可以处理没有事务的客户端。

编辑:
更正查询中的拼写:Ampont -> Amount

于 2009-11-08T05:21:01.657 回答