如何在linq中使用多重连接?

如何在linq中使用多重连接?,linq,join,lambda,linq-to-entities,sum,Linq,Join,Lambda,Linq To Entities,Sum,我是linq新手,此查询正在运行,但我需要通过单个查询获得其中dlist.TransTypeID==0和其中dlist.TransTypeID==1的金额之和。有人能帮我吗?提前感谢这里有一个简化的示例,说明如何做到这一点。如果有必要,可以添加连接,但我不清楚为什么需要一些额外的连接值 var abc1 = from dlist in db.DebtorTransactions.ToList() join war in db.Warranties

我是linq新手,此查询正在运行,但我需要通过单个查询获得其中dlist.TransTypeID==0和其中dlist.TransTypeID==1的金额之和。有人能帮我吗?提前感谢

这里有一个简化的示例,说明如何做到这一点。如果有必要,可以添加连接,但我不清楚为什么需要一些额外的连接值

 var abc1 = from dlist in db.DebtorTransactions.ToList()
                       join war in db.Warranties on dlist.ProductID equals war.Id
                       join ag in db.Agents on war.fldAgentID equals ag.pkfAgentID
                       join sr in db.SalesReps on war.fldSrId equals sr.pkfSrID
                       where dlist.TransTypeID == 1
                       select new
                       {
                          dlist.Amount,
                           dlist.TransTypeID,
                           name = ag.Name,
                           ag.pkfAgentID,
                           sr.pkfSrID,
                           salesnam = sr.Name
                       } into objabc
                       group objabc by new
                       {
                           objabc.TransTypeID,
                           objabc.name,
                           objabc.salesnam,
                           objabc.Amount
                       };
            var amt1 = abc1.Sum(x => x.Key.Amount);


            var abc2 = from dlist in db.DebtorTransactions.ToList()
                       join cjt in db.CarJackaTrackas on dlist.ProductID equals cjt.pkfCjtID
                       join ag in db.Agents on cjt.AgentID equals ag.pkfAgentID
                       join sr in db.SalesReps on cjt.SalesRepId equals sr.pkfSrID
                       where dlist.TransTypeID == 0
                       select new
                       {
                           dlist.Amount,
                           dlist.TransTypeID,
                           name = ag.Name,
                           ag.pkfAgentID,
                           sr.pkfSrID,
                    enter code here`       salesnam = sr.Name
                       } into objabc
                       group objabc by new
                       {
                           objabc.TransTypeID,
                           objabc.name,
                           objabc.salesnam,
                           objabc.Amount
                       };
            var amt2 = abc1.Sum(x => x.Key.Amount);
            //var result1=
            return View();
有几件事需要注意:

  • 我删除了
    ToList()
    。除非您希望将所有的DebtorTransaction放入内存,然后对这些结果运行Linq操作,否则您将希望忽略这一点,并让SQL处理聚合(它比C#好得多)
  • 我仅按
    dlist.TransTypeId
    进行分组。如果需要,您仍然可以按更多字段分组,但在示例中不清楚为什么需要这些字段,所以我只做了一个简化示例

  • 有点不清楚你在问什么。您是否试图为
    dlist.TransTypeID==0
    ==1
    的记录获取
    dlist.Amount
    的总和。或者您想要两个金额结果,一个是
    TransTypeID==0
    ,另一个是
    TransTypeID==1
    ?是@Ocelot20我想要两个结果,其中TransTypeID==0 TransTypeID==1,只需一个查询。可能吗?
    var transTypeAmountSums = (from dlist in db.DebtorTransactions
                               group dlist by dlist.TransTypeId into g
                               where g.Key == 0 || g.Key == 1
                               select new
                               {
                                   TransTypeId = g.Key,
                                   AmountSum = g.Sum(d => d.Amount)
                               }).ToDictionary(k => k.TransTypeId, v => v.AmountSum);
    
    int transTypeZeroSum = transTypeAmountSums[0];
    int transTypeOneSum = transTypeAmountSums[1];