2016-11-30 67 views
0

我試圖使用DTO將我的webapi EF扁平化。到目前爲止,我有以下聲明正確工作。現在我想添加一個複雜的層面來說明IF/THEN。我在SELECT NEW SECTION的第一行放了一個假代碼。 有人可以協助嗎?flatten out webapi EF使用DTO和linq-使用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:當...或開關? – solarissf

+0

可能最簡單的方法是使用三元運算符鏈接,如下所示: == == :.....:<默認結果> –

+0

謝謝!...現在應該可以使用 – solarissf