第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

LINQ 3 個內(nèi)連接和 1 個左外連接

LINQ 3 個內(nèi)連接和 1 個左外連接

C#
婷婷同學(xué)_ 2023-09-09 15:36:31
想知道為什么 LINQ 沒有 Left Join 方法。我一直試圖用無數(shù)的例子來解決這個問題,但沒有那么幸運。其他示例顯示了帶有一個連接的簡單示例。如果我對聯(lián)接進行分組,那么我只會在 select 語句中獲得對 TradeCountries 表的引用。作為 LINQ 的新手,我本可以在 4 小時前使用簡單的 SELECT 語句完成此操作,但在這里我試圖找出為什么 LeftJoin 方法被排除在 LINQ 之外。需要更改“LeftJoin”行才能使其正常工作?/* * GetTop5Distributors @param  int array of series IDs*/public List<TopDistributors> Get5TopDistributors(IEnumerable<int> seriesIds){    _context = new MySQLDatabaseContext();    var result = _context.TradesTrades.Join(_context.TradesSeries, tt => tt.SeriesId, ts => ts.Id, (tt, ts) => new { tt, ts }).Join(_context.TradesTradeDistributors, tsd => tsd.tt.Id, ttd => ttd.TradeId,    (tsd, ttd) => new { tsd, ttd }).Join(_context.TradesOrganisations, tsdto => tsdto.ttd.DistributorId, to => to.Id,    (tsdto, to) => new { tsdto, to }).LeftJoin(_context.TradesCountries, tsdc => tsdc.to.CountryId, tc => tc.Id,     (tsdc, tc) => new {tsdc, tc}).Where(x => seriesIds.Contains(x.tsdc.tsdto.tsd.tt.SeriesId)).Where(x => x.tsdc.tsdto.tsd.tt.FirstPartyId == null).Where(x => x.tsdc.tsdto.tsd.tt.Status != "closed").Where(x => x.tsdc.tsdto.tsd.tt.Status != "cancelled").GroupBy(n => new { n.tsdc.tsdto.tsd.tt.SeriesId, n.tsdc.tsdto.ttd.DistributorId }).Select(g =>    new TopDistributors    {        SeriesId = g.Key.SeriesId,        DistributorName = g.Select(i => i.tsdc.to.Name).Distinct().First(),        IsinNickname = g.Select(i => i.tsdc.tsdto.tsd.ts.Nickname).Distinct().First(),        CountryName = g.Select(i => i.tc.Name).Distinct().First(),        CommissionTotal = Math.Ceiling(g.Sum(i => i.tsdc.tsdto.ttd.Commission))    }).OrderByDescending(x => x.CommissionTotal).Take(5).ToList();    return result;}這是相當(dāng)簡單的 select 語句,其數(shù)量級或數(shù)量級太長,無法轉(zhuǎn)換為 LINQ。
查看完整描述

1 回答

?
哈士奇WWW

TA貢獻1799條經(jīng)驗 獲得超6個贊

按照我的食譜,這里是 SQL 到 LINQ 的或多或少簡單的轉(zhuǎn)換。我將 移至where接近其約束的位置,并用于let為 創(chuàng)建一個方便的名稱Sum,因為 LINQ 不允許您轉(zhuǎn)發(fā)引用匿名對象成員。


var ans = from tt in trades_trades

          where new[] { 17, 18 }.Contains(tt.series_id) && tt.first_party_id == null &&

                tt.status != "closed" && tt.status != "cancelled"

          join ts in trades_series on tt.series_id equals ts.id

          join ttd in trades_trade_distributors on tt.id equals ttd.trade_id

          join to in trades_orginizations on ttd.distributor_id equals to.id

          join tc in trades_countries on to.country_id equals tc.id into tcj

          from tc in tcj.DefaultIfEmpty() // GroupJoin -> left join

          group new { tt, ts, ttd, to, tc } by new { tt.series_id, ttd.distributor_id } into tradeg

          let Commission_Total = tradeg.Sum(trade => trade.ttd.commission)

          orderby Commission_Total descending

          select new {

            tradeg.Key.series_id,

            tradeg.First().to.name,

            tradeg.First().ts.nickname,

            Country_Name = tradeg.First().tc == null ? null : tradeg.First().tc.name,

            Commission_Total

          };


查看完整回答
反對 回復(fù) 2023-09-09
  • 1 回答
  • 0 關(guān)注
  • 113 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號