簡體   English   中英

使用DTO和linq-使用IF / THEN展平webapi EF

[英]flatten out webapi EF using DTO and linq- using IF/THEN

我正在嘗試使用DTO展平我的webapi EF。 到目前為止,我的以下聲明可以正常工作。 現在,我想添加一層表示IF / THEN的復雜性。 我在SELECT NEW SECTION的第一行中放置了一個偽造的代碼。 有人可以幫忙嗎?

            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
                            }
                    );

如果我正確理解您的要求,您將需要以下內容:

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
                            }
                    );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM