Angularjs 为什么Linq查询返回重复的列记录
我正在angular js应用程序中使用wcf rest服务。我正在尝试将三个linq查询加入到单个查询中,并将记录显示到angular js应用程序中。但问题是,当我输入帐号并单击提交按钮时,它还会一次又一次地显示相同的记录。我想显示空行,而不是显示相同的记录 以下是Linq查询:Angularjs 为什么Linq查询返回重复的列记录,angularjs,linq,wcf,Angularjs,Linq,Wcf,我正在angular js应用程序中使用wcf rest服务。我正在尝试将三个linq查询加入到单个查询中,并将记录显示到angular js应用程序中。但问题是,当我输入帐号并单击提交按钮时,它还会一次又一次地显示相同的记录。我想显示空行,而不是显示相同的记录 以下是Linq查询: public string TranscationDetails(string Account_Number) { var accountNumber =
public string TranscationDetails(string Account_Number)
{
var accountNumber = int.Parse(Account_Number);//It could be better to use TryParse
using (HalifaxDatabaseEntities context = new HalifaxDatabaseEntities())
{
var inOut = context.Current_Account_Withdraw.Select(w => new {
w.Account_Number
,
Deposit = (decimal?)null
,
Withdrawal = (decimal?)w.Amount
,
w.Date
}).Concat(context.Current_Account_Deposit.Select(d => new {
d.Account_Number
,
Deposit = (decimal?)d.Amount
,
Withdrawal = (decimal?)null
,
d.Date
}))
.Where(r => r.Account_Number == accountNumber)
.OrderBy(r => r.Date)
.ToList();
// var summary = inOut.GroupBy(i => i.Account_Number).Select(g => new
// {
// Account_Number = g.Key
//,
// Balance = g.Sum(x => x.Deposit ?? 0M - x.Withdrawal ?? 0M)
//,
// TotalDeposits = g.Sum(x => x.Deposit ?? 0M)
//,
// TotalWithdrawals = g.Sum(x => x.Withdrawal ?? 0M)
// });
var js = new System.Web.Script.Serialization.JavaScriptSerializer();
return js.Serialize(inOut); // return JSON string
}
}
}
}
这是我单击带有帐号的按钮时的屏幕截图,Linq查询也显示了预期的记录。
我希望在行的底部输入总金额,并在底部输出总金额以及帐户记录。
但当我将这两个查询结合起来时
public string TranscationDetails(string Account_Number)
{
var accountNumber = int.Parse(Account_Number);//It could be better to use TryParse
using (HalifaxDatabaseEntities context = new HalifaxDatabaseEntities())
{
var inOut = context.Current_Account_Withdraw.Select(w => new {
w.Account_Number
,
Deposit = (decimal?)null
,
Withdrawal = (decimal?)w.Amount
,
w.Date
}).Concat(context.Current_Account_Deposit.Select(d => new {
d.Account_Number
,
Deposit = (decimal?)d.Amount
,
Withdrawal = (decimal?)null
,
d.Date
}))
.Where(r => r.Account_Number == accountNumber)
.OrderBy(r => r.Date)
.ToList();
var summary = inOut.GroupBy(i => i.Account_Number).Select(g => new
{
Account_Number = g.Key
,
Balance = g.Sum(x => x.Deposit ?? 0M - x.Withdrawal ?? 0M)
,
TotalDeposits = g.Sum(x => x.Deposit ?? 0M)
,
TotalWithdrawals = g.Sum(x => x.Withdrawal ?? 0M)
});
var js = new System.Web.Script.Serialization.JavaScriptSerializer();
return js.Serialize(summary); // return JSON string
}
}
我得到了这个结果。发生这种情况是因为您多次引入相同的表。假设同一
账户\ u详细信息
项目有多笔存款和多笔取款,则需要按账号对结果进行分组
以下是更正的版本:
var CombinedQuery = (
from a in context.Current_Account_Details
join w in context.Current_Account_Withdraw on w.Account_Number equals a.Account_Number
join d in context.Current_Account_Deposits on d.Account_Number equals a.Account_Number
where a.Account_Number == accountNumber
group new {a, w, d} by a.Account_Number into g
select new {
Account_Number = g.Key
, DepositAmount = g.Sum(i => i.d.Amount)
, WithdrawalAmount = g.Sum(i => i.w.Amount)
, Account_Balance = g.Sum(i => i.a.Account_Balance)
}
).ToList();
首先,我想显示记录,如银行账户每月现金流入和现金流出报表
然后,您可以不分组或加入,像这样:
var inOut = context.Current_Account_Withdraw.Select(w => new {
w.Account_Number
, Deposit = (decimal?)null
, Withdrawal = (decimal?)w.Amount
, w.Date
}).Concat(context.Current_Account_Deposit.Select(d => new {
d.Account_Number
, Deposit = (decimal?)d.Amount
, Withdrawal = (decimal?)null
, d.Date
}))
.Where(r => r.Account_Number == accountNumber)
.OrderBy(r => r.Date)
.ToList();
上面的查询连接存款和取款,并按日期排序
现在,您可以计算内存中的总数:
var summary = inOut.GroupBy(i => i.Account_Number).Select(g => new {
Account_Number = g.Key
, Balance = g.Sum(x => x.Deposit ?? 0M - x.Withdrawal ?? 0M)
, TotalDeposits = g.Sum(x => x.Deposit ?? 0M)
, TotalWithdrawals = g.Sum(x => x.Withdrawal ?? 0M)
});
@Mohammad由于您选择的是单个记录,最好将它们添加到内存中。@Mohammad请查看您后续问题的注释,它们解释了错误,并提出了解决方案。摘要行的结构与事务行不同,如果不统一union/concat中的元素类型、名称和顺序,则无法将这两个行推送到一个表中。