gpt4 book ai didi

linq - 如何在 linq 中进行聚合查询

转载 作者:行者123 更新时间:2023-12-01 23:03:17 24 4
gpt4 key购买 nike

我是 linq 的新手,我需要帮助。我有一个带有金额字段的交易表,我想将金额字段拆分为借方和贷方。什么是 linq 相当于下面的 sql 查询:
从 Account = strAccount 的交易中选择 sum(Amount < 0 ? Amount:0) 作为 Debit,sum (Amount >0 ? 0: Amount) 作为 Credit。

最佳答案

不幸的是,没有像在获取单个结果时那样在单个 LINQ 查询中表达两个聚合的简单方法。两个单独的查询将是:

// Doesn't actually perform a query yet
var accountTransactions = db.Transactions.Where(t => t.AccountId == accountId);

var credit = accountTransactions.Sum(t => t.Amount > 0 ? t.Amount : 0);
var debit = accountTransactions.Sum(t => t.Amount < 0 ? t.Amount : 0);

或者:
var credit = accountTransactions.Sum(t => Math.Max(t.Amount, 0));
var debit = accountTransactions.Sum(t => Math.Min(t.Amount, 0));

我不能保证这些会在(比如)LINQ to SQL 中有翻译,但我希望他们会。

如果您要查找所有帐户的贷方/借方,则可以在单个查询中执行此操作:
var query = from account in db.Accounts
join transaction in db.Transactions
on account.AccountID equals transaction.TransactionID
into trans
select new { Account = account,
Credit = trans.Sum(t => Math.Max(t.Amount, 0)),
Debit = trans.Sum(t => Math.Min(t.Amount, 0)) };

现在当然可以使用:
var myTransactions = query.Where(result => result.Account.AccountId == accountID)
.FirstOrDefault();

那将是单个 SQL 语句,如果找不到该帐户 ID,则返回单个结果或 null。同样,您必须查看它实际上是如何转换为 SQL 的。

关于linq - 如何在 linq 中进行聚合查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5561753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com