public StockSearchItem FindStockMatching(string search) { StockSearchItem match = null; //Logs.Task("FindStockMatching " + search); if (string.IsNullOrEmpty(search)) { return(null); } if (_stockSearchDictionary.ContainsKey(search)) { match = _stockSearchDictionary[search]; } if (match != null) { foreach (var stockItem in _stockSearchDictionary.Values) { if (IsStockMatching(search, stockItem)) { match = stockItem; break; } } } //Logs.Task("FindStockMatching " + search); return(match); }
public bool IsStockMatching(string search, StockSearchItem stockItem) { if (string.IsNullOrEmpty(search)) { return(false); } search = search.ToLower(); if (StockNameExclusions.Contains(search)) { return(false); } if (stockItem != null) { if (stockItem.Symbol.ToLower().StartsWith(search)) { return(true); } var words = stockItem.Name.ToLower().Split(' ').ToList(); if (words.Any(word => word.StartsWith(search))) { return(true); } if (stockItem.Name.ToLower().StartsWith(search)) { return(true); } } return(false); // if no match }
/// <summary> load stock search data </summary> private void LoadStockSearchData() { var asmb = this.GetType().Assembly; var stockSymbols = DataProvider.GetCsvTable("StockSymbols.csv", asmb); _stockSearchList = new List <StockSearchItem>(); for (int i = 1; i < stockSymbols.Rows.Count; i++) { var csvRow = stockSymbols.Rows[i]; if (csvRow.Count == 7) { var stock = new StockSearchItem(); stock.Exchange = csvRow[0]; stock.Symbol = csvRow[1]; stock.Name = csvRow[2]; stock.MarketCap = csvRow[3]; stock.Sector = csvRow[5]; stock.Industry = csvRow[6]; if (!csvRow[4].Equals("N/A")) { stock.IPO = int.Parse(csvRow[4]); } _stockSearchList.Add(stock); if (!_stockSearchDictionary.ContainsKey(stock.Symbol)) { _stockSearchDictionary.Add(stock.Symbol, stock); } } } StockNameExclusions = StockNameExclusions.Select(v => v.ToLower()).ToList(); OnPropertyChanged("StockSearchList"); }