2016-11-30 11 views
0

私はDTOを使用してwebapi EFを平坦化しようとしています。これまでのところ、私は以下の声明が正しく働いています。 IF/THENという複雑さのレイヤーを追加したいと思います。私はSELECT NEW SECTIONの最初の行に偽のコードを入れました。 誰かが助けてくれますか?DTOPとlinqを使用してwebapi EFをフラット化IF/THENを使用

  var query = (
         from acctTbl in db.Accounts 
         join tradeTbl in db.Trades on acctTbl.AccountID equals tradeTbl.AccountID into ts 
         from tradeTbl in ts.DefaultIfEmpty() 
         join mapClientAcct in db.Mapping_ClientAccounts on acctTbl.AccountID equals mapClientAcct.AccountID 
         join clientTbl in db.Clients on mapClientAcct.ClientID equals clientTbl.ClientID 
         join mapUserClient in db.Mapping_UserClients on clientTbl.ClientID equals mapUserClient.ClientID 
         join aspNetUser in db.AspNetUsers on mapUserClient.AspNetUsersID equals aspNetUser.Id 
         join mktData in db.MarketDatas on tradeTbl.MarketDataID equals mktData.MarketDataID into ms 
         from mktData in ms.DefaultIfEmpty() 
         join mktCode in db.GMI_MarketCodes on tradeTbl.GMI_MarketCodesID equals mktCode.GMI_MarketCodesID into mc 
         from mktCode in mc.DefaultIfEmpty() 
         join Mgrs in db.Managers on acctTbl.ManagerID equals Mgrs.ManagerID 
         join FxMkts in db.ForexMarkets on mktData.crncy equals FxMkts.CurrencySymbol into fm 
         from FxMkts in fm.DefaultIfEmpty() 
          where acctTbl.AccountActive == true 
           && clientTbl.ClientID == clientID 
           && aspNetUser.UserName == username 
          select new TradeDetailDTO() 
          { 

           --THIS IS WHAT I WANT TO DO!!! 
           IF tradeTblIdentifier == "F" THEN 'yes' 
           ELSE 'no' 
           ------------------------- 

           Filedate = tradeTbl.Filedate, 
           Quantity = tradeTbl.Quantity, 
           Month = tradeTbl.Month, 
           Strike = tradeTbl.Strike, 
           PutCall = tradeTbl.PutCall, 
           Prompt = tradeTbl.Prompt, 
           StmtPrice = tradeTbl.Price,          
           ShortDesc = mktCode.ShortDesc, 
           Sector = mktCode.Sector, 
           ExchName = mktCode.ExchName, 
           BBSymbol = mktData.BBSymbol, 
           BBName = mktData.Name, 
           fut_Val_Pt = mktData.fut_Val_Pt, 
           crncy = mktData.crncy, 
           fut_tick_size = mktData.fut_tick_size, 
           fut_tick_val = mktData.fut_tick_val, 
           fut_init_spec_ml = mktData.fut_init_spec_ml, 
           last_price = mktData.last_price, 
           bid = mktData.bid, 
           ask = mktData.ask, 
           px_settle_last_dt_rt = mktData.px_settle_last_dt_rt, 
           px_settle_actual_rt = mktData.px_settle_actual_rt, 
           chg_on_day = mktData.chg_on_day, 
           prev_close_value_realtime = mktData.prev_close_value_realtime, 
           AccountNumber = acctTbl.AccountNumber, 
           TradeLevel = acctTbl.TradeLevel, 
           ManagerName = Mgrs.ManagerName, 
           ManagerShortCode = Mgrs.ManagerShortCode, 
           ForexLastPrice = db.MarketDatas.FirstOrDefault(x => x.BBSymbol == mktData.crncy + " BGN CURNCY") == null ? 1: db.MarketDatas.FirstOrDefault(x => x.BBSymbol == mktData.crncy + " BGN CURNCY").last_price, 
           //ForexLastPrice = FxMkts.LastPrice, ORIGINAL 
           TopdayIdentifier = "P", 
           DailyPercentage = acctTbl.DailyPercentage, 
           AccountType = acctTbl.AccountType 
          } 
        ); 

答えて

1

私が正しくあなたを理解している場合、あなたがこのような何かしたい:

var query = (
         from acctTbl in db.Accounts 
         join tradeTbl in db.Trades on acctTbl.AccountID equals tradeTbl.AccountID into ts 
         from tradeTbl in ts.DefaultIfEmpty() 
         join mapClientAcct in db.Mapping_ClientAccounts on acctTbl.AccountID equals mapClientAcct.AccountID 
         join clientTbl in db.Clients on mapClientAcct.ClientID equals clientTbl.ClientID 
         join mapUserClient in db.Mapping_UserClients on clientTbl.ClientID equals mapUserClient.ClientID 
         join aspNetUser in db.AspNetUsers on mapUserClient.AspNetUsersID equals aspNetUser.Id 
         join mktData in db.MarketDatas on tradeTbl.MarketDataID equals mktData.MarketDataID into ms 
         from mktData in ms.DefaultIfEmpty() 
         join mktCode in db.GMI_MarketCodes on tradeTbl.GMI_MarketCodesID equals mktCode.GMI_MarketCodesID into mc 
         from mktCode in mc.DefaultIfEmpty() 
         join Mgrs in db.Managers on acctTbl.ManagerID equals Mgrs.ManagerID 
         join FxMkts in db.ForexMarkets on mktData.crncy equals FxMkts.CurrencySymbol into fm 
         from FxMkts in fm.DefaultIfEmpty() 
          where acctTbl.AccountActive == true 
           && clientTbl.ClientID == clientID 
           && aspNetUser.UserName == username 
          select new TradeDetailDTO() 
          { 

           YesNo = tradeTbl.Identifier == "F"?"yes":"no", 
           Filedate = tradeTbl.Filedate, 
           Quantity = tradeTbl.Quantity, 
           Month = tradeTbl.Month, 
           Strike = tradeTbl.Strike, 
           PutCall = tradeTbl.PutCall, 
           Prompt = tradeTbl.Prompt, 
           StmtPrice = tradeTbl.Price,          
           ShortDesc = mktCode.ShortDesc, 
           Sector = mktCode.Sector, 
           ExchName = mktCode.ExchName, 
           BBSymbol = mktData.BBSymbol, 
           BBName = mktData.Name, 
           fut_Val_Pt = mktData.fut_Val_Pt, 
           crncy = mktData.crncy, 
           fut_tick_size = mktData.fut_tick_size, 
           fut_tick_val = mktData.fut_tick_val, 
           fut_init_spec_ml = mktData.fut_init_spec_ml, 
           last_price = mktData.last_price, 
           bid = mktData.bid, 
           ask = mktData.ask, 
           px_settle_last_dt_rt = mktData.px_settle_last_dt_rt, 
           px_settle_actual_rt = mktData.px_settle_actual_rt, 
           chg_on_day = mktData.chg_on_day, 
           prev_close_value_realtime = mktData.prev_close_value_realtime, 
           AccountNumber = acctTbl.AccountNumber, 
           TradeLevel = acctTbl.TradeLevel, 
           ManagerName = Mgrs.ManagerName, 
           ManagerShortCode = Mgrs.ManagerShortCode, 
           ForexLastPrice = db.MarketDatas.FirstOrDefault(x => x.BBSymbol == mktData.crncy + " BGN CURNCY") == null ? 1: db.MarketDatas.FirstOrDefault(x => x.BBSymbol == mktData.crncy + " BGN CURNCY").last_price, 
           //ForexLastPrice = FxMkts.LastPrice, ORIGINAL 
           TopdayIdentifier = "P", 
           DailyPercentage = acctTbl.DailyPercentage, 
           AccountType = acctTbl.AccountType 
          } 
        ); 
+0

完璧な...それが動作感謝を。今それをさらに進歩させるために、私は3つまたは4つの選択肢があれば、元の質問にしておかなければなりません。どのようにCASE:WHEN ...またはSWITCH? – solarissf

+0

おそらく最も簡単なアプローチは、次のような三項演算子の連鎖を使用することです: == == :.....:<デフォルトの結果> –

+0

ありがとうございました! – solarissf

関連する問題