C# 将SQL转换为具有多个联接、求和和和分组方式的Linq

C# 将SQL转换为具有多个联接、求和和和分组方式的Linq,c#,sql,.net,linq,C#,Sql,.net,Linq,我正在尝试将一个SQL查询转换为LINQ,其中该查询有两个左连接和group by SELECT t1.Shop,t1.Stake, t2.Payout, t3.Anticipation FROM (SELECT Shop, sum(Stake) AS 'Stake' FROM Bets GROUP BY Shop) t1 FULL OUTER join (SELECT Shop, SUM(Amount) AS 'Payout' FROM Transactions where

我正在尝试将一个SQL查询转换为LINQ,其中该查询有两个左连接和group by

SELECT t1.Shop,t1.Stake, t2.Payout, t3.Anticipation FROM
    (SELECT Shop, sum(Stake) AS 'Stake' FROM Bets GROUP BY Shop) t1
  FULL OUTER join
    (SELECT Shop, SUM(Amount) AS 'Payout' FROM Transactions where TransactionType = 1 GROUP BY Shop) t2 on t1.Shop = t2.Shop
  FULL OUTER join 
    (SELECT Shop, sum(WinAmount) as 'Anticipation' from Bets where [Status] = 'W' group by Shop) t3 on t1.shop  = t3.shop
这是一个有效的SQL查询,下面您可以看到我尝试过的LINQ代码,但它不起作用

var obj = (from b in _context.Bets
group b by b.Shop into betsList
join t in _context.Transactions.Where(x = >x.TransactionType == TransactionType.Acceptance) on betsList.Key equals t.Shop
group t by t.Shop into transactionsList
from t in transactionsList.DefaultIfEmpty()
join ant in _context.Bets.Where(x = >x.Status == 'W') on b.Id equals ant.Id into anticipationList
from ant in anticipationList.DefaultIfEmpty()
select new {
    Shop = betsList.Key,
    Stake = betsList.Sum(k = >k.Stake),
    Payout = transactionsList.Sum(x = >x.Amount),
    Anticipation = anticipationList.Sum(x = >x.WinAmount)
}).ToList();
SQL查询的输出数据示例如下:


最好将查询分成几个小部分。这一个应该有效,它不是完全的外部连接,但是,我认为,根据您的数据,它可能有效:

变量查询= 来自b in_context.Bets b组由新的{b.Shop}变成g组 选择新的 { g、 钥匙,商店, 桩=g.桩=x.桩 }; var transactionQuery= 来自t in_context.Transactions 其中t.TransactionType==TransactionType.Acceptance 通过新的{t.Shop}将t分组为g 选择新的 { g、 钥匙,商店, 支出=总金额x=>x.金额 }; var AntiSpactionQuery= 来自b in_context.Bets 其中b.状态=='W' b组由新的{b.Shop}变成g组 选择新的 { g、 钥匙,商店, 预期=g.Sumx=>x.WinAmount }; 变量查询= 来自b的查询 在交易中加入t。b.商店等于t.商店进入tg 从tg.DefaultIfEmpty中的t开始 将a加入b上的反间谍查询。商店等于a。商店进入ag 从ag.DefaultIfEmpty中的 选择新的 { b、 商店, b、 赌注, 支出=双倍?t.支出, 预期=双重预期 }; var result=query.ToList;
,输入一点样本就好了。还有一份可以复制的。img不是一个好主意。您可能可以尝试在SQL SELECT Shop的linq部分中编写,将赌注作为“赌注”从Bets GROUP by Shop中写入,从而隔离您的问题。=>var stakeBets=_context.Bets.GroupBy.Select进入不同的变量并验证结果。完整的外部联接将更容易写入。