public bool Trade() { if (User == null || User.Id <= 0) { return(false); } var totalCost = (LatestPrice * TradeSharesCount); var sh = new ShareHelper(); var db = sh._db; var datauser = db.Users.Where(du => du.Id == User.Id).FirstOrDefault(); var dataportfolio = db.Portfolios.Include(p => p.Shares).Where(p => p.Id == User.Portfolio.Id).FirstOrDefault(); if (State == "Buy") { if (LatestVolume < TradeSharesCount || totalCost > User.AccountBalance) { return(false); } } if (State == "Sell") { var sl = dataportfolio.Shares.Where(s => s.Symbol == Symbol).ToList(); var cnt = 0; foreach (var item in sl) { cnt += item.NumberOfShares; } if (LatestVolume < TradeSharesCount || TradeSharesCount > cnt) { return(false); } totalCost = -totalCost; TradeSharesCount = -TradeSharesCount; } var share = new Share() { Symbol = Symbol.ToUpper(), NumberOfShares = TradeSharesCount, Price = LatestPrice, State = State, TimeStamp = DateTime.Now }; sh.SetShare(share); var datashare = db.Shares.Where(s => s.Symbol == Symbol).LastOrDefault(); dataportfolio.Shares.Add(datashare); datauser.AccountBalance -= totalCost; db.SaveChanges(); return(true); }