0
 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のAmountの合計を取得する必要があります。誰か私を助けてくれませんか?前もって感謝します

4

1 に答える 1

0

これは、それを行う方法の縮小された例です。必要に応じて結合を追加できますが、追加の結合値が必要な理由がわかりません。

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()た。すべての DebtorTransactions をメモリに取り込み、それらの結果に対して Linq 操作を実行する場合を除き、それを省略して、SQL に集計を処理させます (C# よりもはるかに優れています)。
  2. のみでグループ化しましたdlist.TransTypeId。必要に応じてさらに多くのフィールドでグループ化することもできますが、この例ではそれらが必要な理由が不明だったので、単純化した例を作成しました。
于 2013-10-16T13:00:00.290 に答える