【问题标题】:how use multiple join in linq?如何在 linq 中使用多个联接?
【发布时间】:2013-10-15 09:36:25
【问题描述】:
 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();

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

【问题讨论】:

  • 有点不清楚你在问什么。您是否尝试获取 dlist.Amount 的总和以获取 dlist.TransTypeID == 0== 1 的记录。或者你想要两个数量的结果,一个是TransTypeID == 0,另一个是TransTypeId == 1
  • 是的 @Ocelot20 我想要两个结果,其中 TransTypeID == 0 TransTypeId == 1 只有一个查询。有可能吗?

标签: linq join lambda linq-to-entities sum


【解决方案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];

有几点需要注意:

  1. 我删除了ToList()。除非您想将 ALL DebtorTransactions 放入内存,然后对这些结果运行 Linq 操作,否则您需要将其排除在外,让 SQL 负责聚合(它比 C# 好得多)。
  2. 我只按dlist.TransTypeId 分组。如果需要,您仍然可以按更多字段进行分组,但在示例中并不清楚为什么需要它们,所以我只是做了一个简化的示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多