我是 linq 的新手,任何人都可以帮助我将以下查询转换为 linq。
SELECT A.Name,
Sum(C.MoneyIN) - Sum(C.MoneyOut) AS Balance
FROM Customers A
JOIN Banks B ON A.Id = B.id
JOIN BankTransactions C ON B.Id = C.BankID
GROUP BY A.Name
我试着把它转换成linq
var query = from c in db.Customers
join b in db.Banks on c.Id equals b.CustomerId
join bt in db.BankTransactions on b.Id equals bt.BankId
group c by c.Name into Cust
select new
{
Name = c.Name,
Balance = Cust.Sum(bt.MoneyIn) - Cust.Sum(bt.MoneyOut)
};
谁能告诉我哪里错了?
提前致谢。
最佳答案
试试看:
var query = from c in db.Customers
join b in db.Banks on c.Id equals b.CustomerId
join bt in db.BankTransactions on b.Id equals bt.BankId
group bt by c.Name into Cust
select new
{
Name = Cust.Name,
Balance = Cust.Sum(x => x.MoneyIn) - Cust.Sum(x => x.MoneyOut)
};
似乎问题是在上次选择中您使用了 c.Name
但应该使用 Cust.Name
因为您已经执行了分组。
更新 1.
还有 Cust.Sum(bt.MoneyIn)
=> Cust.Sum(x => x.MoneyIn)
。
更新 2.
此外,您按错误的 Prop 进行分组。如果你想将 sum 应用到你的 BankTransactions 你需要像这样分组:
group bt by c.Name into Cust
所以工作示例可能如下所示:
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Bank
{
public int CustomerId { get; set; }
public int Id { get; set; }
}
public class BankTransaction
{
public int BankId { get; set; }
public int MoneyIn { get; set; }
public int MoneyOut { get; set; }
}
并查询编译:
var customers = new List<Customer>();
var banks = new List<Bank>();
var bankTransactions = new List<BankTransaction>();
var result = from c in customers
join b in banks on c.Id equals b.CustomerId
join bt in bankTransactions on b.Id equals bt.BankId
group bt by c.Name into Cust
select new { Name = Cust.Key, Balance = Cust.Sum(x => x.MoneyIn) - Cust.Sum(x => x.MoneyIn) };
关于c# - 使用 sum 和 group by 将 Sql Query 转换为 linq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26906903/