Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用c#linq中另一个查询的结果减去一个查询的结果?_C#_Linq - Fatal编程技术网

如何用c#linq中另一个查询的结果减去一个查询的结果?

如何用c#linq中另一个查询的结果减去一个查询的结果?,c#,linq,C#,Linq,我想从investment中获取记录,并从investment\u Line中计算金额的总和,其中investment\u Line.ParentID==investment.investment 减去金额Calculte==d.Amount-Answer var a = (from investment in _entities.Investments where investment.StatusID == 4 select new {

我想从
investment
中获取记录,并从
investment\u Line
中计算
金额的总和,其中
investment\u Line.ParentID==investment.investment

减去金额
Calculte==d.Amount-Answer

var a = (from investment in _entities.Investments
        where investment.StatusID == 4
        select new
        {
            RefNo = investment.RefNo,
            InvestedAmount = investment.InvestedAmount,
            Amount = investment.InvestedAmount + investment.ProfitAmount,
            InvestmentID = investment.ID,
            UserID = investment.UserID,
            StatusID = investment.StatusID,

        }).ToList();

if (a.Count() != 0)
{
    foreach (var row in a)
    {
        var count = (_entities.Investment_Line.Where(x => x.ParentID == row.InvestmentID)).Count();
        if(count != 0)
        {
            var _group = _entities.Investment_Line.Where(x => x.ParentID == row.InvestmentID).GroupBy(g => g.ParentID).Select(s => new { SumAmount = s.Sum(sum => sum.Amount) });
            double answer = double.ConvertToDouble(_group.Select(x => x.SumAmount));
            var data = (from d in a
                        select new Search.ReadyInvestmentList
                        {
                            RefNo = d.RefNo,
                            InvestedAmount = d.InvestedAmount,
                            TotalAmount = d.Amount,
                            InvestmentID = d.InvestmentID,
                            UserID = d.UserID,
                            StatusID = d.StatusID,
                            Calculate = d.Amount-answer
                        }).ToList();
        }
    }
}
投资表

+---+--------------------------+--------+-------------+----------------+--------+-------------+----------+
|ID | CreateDate               | UserID |  RefNo      | InvestedAmount | Growth%| ProfitAmount|StatusID  |
+---+--------------------------+--------+-------------+----------------+--------+-------------+----------+
|1  | 2017-01-11 16:39:06.483  | 1      |  BPWM57G2Q2 | 20000          | 30     | 6000        | 4        |
|2  | 2017-01-11 16:49:18.850  | 2      |  BPWM56H2T0 | 10000          | 30     | 3000        | 4        |
|3  | 2017-01-11 17:15:02.667  | 3      |  BPWM56G2L0 | 500            | 30     | 1500        | 1        |
|4  | 2017-01-12 20:22:02.160  | 5      |  BPWM68L2I0 | 500            | 30     | 150         | 2        |
|5  | 2017-01-12 20:25:03.160  | 5      |  BPWM63F2I5 | 2000           | 30     | 600         | 4        |
+---+--------------------------+--------+-------------+----------------+--------+-------------+----------+
+----+-------------+-----------+-----------+-------+------------+-----------+
| ID | InvestmentID| InvestorID| AssistorID| Amount| RefNo      |  ParentID |
+----+-------------+-----------+-----------+-------+------------+-----------+
| 1  | 2           | 2         | 1         | 10000 | BPWM56H2T0 |  1        |
| 2  | 3           | 3         | 1         | 5000  | BPWM56G2L0 |  1        |
| 3  | 4           | 5         | 3         | 500   | BPWM68L2I0 |  3        |
+----+-------------+-----------+-----------+-------+------------+-----------+
投资行表

+---+--------------------------+--------+-------------+----------------+--------+-------------+----------+
|ID | CreateDate               | UserID |  RefNo      | InvestedAmount | Growth%| ProfitAmount|StatusID  |
+---+--------------------------+--------+-------------+----------------+--------+-------------+----------+
|1  | 2017-01-11 16:39:06.483  | 1      |  BPWM57G2Q2 | 20000          | 30     | 6000        | 4        |
|2  | 2017-01-11 16:49:18.850  | 2      |  BPWM56H2T0 | 10000          | 30     | 3000        | 4        |
|3  | 2017-01-11 17:15:02.667  | 3      |  BPWM56G2L0 | 500            | 30     | 1500        | 1        |
|4  | 2017-01-12 20:22:02.160  | 5      |  BPWM68L2I0 | 500            | 30     | 150         | 2        |
|5  | 2017-01-12 20:25:03.160  | 5      |  BPWM63F2I5 | 2000           | 30     | 600         | 4        |
+---+--------------------------+--------+-------------+----------------+--------+-------------+----------+
+----+-------------+-----------+-----------+-------+------------+-----------+
| ID | InvestmentID| InvestorID| AssistorID| Amount| RefNo      |  ParentID |
+----+-------------+-----------+-----------+-------+------------+-----------+
| 1  | 2           | 2         | 1         | 10000 | BPWM56H2T0 |  1        |
| 2  | 3           | 3         | 1         | 5000  | BPWM56G2L0 |  1        |
| 3  | 4           | 5         | 3         | 500   | BPWM68L2I0 |  3        |
+----+-------------+-----------+-----------+-------+------------+-----------+
所需输出

+----+---------+-----------+-------+---------------+------------+-----------+
| InvestmentID | RefNo     | UserID| InvestedAmount| TotalAmount| Calculate |
+--------------+--------------------+--------------+------------+-----------+
| 1            | BPWM57G2Q2| 1     | 20000         | 26000      | 15000     |
| 2            | BPWM56H2T0| 2     | 10000         | 13000      | 0         |
| 5            | BPWM63F2I5| 5     | 2000          | 2600       | 0         |
+----+---------+-----------+-------+-------------- +------------+-----------+
最好的方法是什么?
请提供帮助。

如果主详细信息表中有许多记录,则代码的性能将很差。因为您将有
masterRecordCount*DetailRecordCount
嵌套循环。因此,如果您分组并加入一个查询,效果会更好

var calculatedlist = from I in _entities.Investments
            join IL in _entities.Investment_Line on I.ID equals IL.ParentID
            group IL by new { I.ID } into g
            select new { 
                InvestmentID  = g.Key,
                RefNo      = g.Max(m => m.I.RefNo), 
                UserID = g.Max(m => m.I.UserID) ,
                InvestedAmount = g.Max(m => m.I.InvestedAmount) ,
                TotalAmount = g.Max(m => m.I.InvestedAmount) + g.Max(m => m.I.ProfitAmount),
                Calculate  = g.Max(m => m.I.InvestedAmount) + g.Max(m => m.I.ProfitAmount) - g.Sum(m => m.IL.Amount)
            };

若主详细信息表中有许多记录,则代码的性能将很差。因为您将有
masterRecordCount*DetailRecordCount
嵌套循环。因此,如果您分组并加入一个查询,效果会更好

var calculatedlist = from I in _entities.Investments
            join IL in _entities.Investment_Line on I.ID equals IL.ParentID
            group IL by new { I.ID } into g
            select new { 
                InvestmentID  = g.Key,
                RefNo      = g.Max(m => m.I.RefNo), 
                UserID = g.Max(m => m.I.UserID) ,
                InvestedAmount = g.Max(m => m.I.InvestedAmount) ,
                TotalAmount = g.Max(m => m.I.InvestedAmount) + g.Max(m => m.I.ProfitAmount),
                Calculate  = g.Max(m => m.I.InvestedAmount) + g.Max(m => m.I.ProfitAmount) - g.Sum(m => m.IL.Amount)
            };

您在LINQ查询中引用的一些列名以及您的问题似乎与您提供的示例表的列名不匹配,或者缺少,例如ActiveYN。@MattD我已更新了我的问题您在LINQ查询中引用的一些列名,以及您的问题似乎与您提供的示例表的列名不匹配,或者缺少,例如ActiveYN。@MattD我已更新了我的问题