Angularjs 为什么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 =

我正在angular js应用程序中使用wcf rest服务。我正在尝试将三个linq查询加入到单个查询中,并将记录显示到angular js应用程序中。但问题是,当我输入帐号并单击提交按钮时,它还会一次又一次地显示相同的记录。我想显示空行,而不是显示相同的记录

以下是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(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中的元素类型、名称和顺序,则无法将这两个行推送到一个表中。