public T Get <T>(PortfolioPosition position, ScalarAttribute attribute, DateTime dateTime, T defaultValue) where T : struct, IConvertible { //прочитали скалярный атрибут scalarStr //нашли в нем наше значение //вернули //не нашли в нем наше значение вернули defaultValue ScalarStr str = GetScalarStr(position, attribute); if (str == null || !str.HasValue(dateTime)) { return(defaultValue); } string strIdent = str.Get(dateTime); KeyValuePair <Type, string> tke = new KeyValuePair <Type, string>(typeof(T), strIdent); if (_mapping.TKE.ContainsKey(tke)) { Enum value = _mapping.TKE[tke]; return((T)Enum.Parse(typeof(T), value.ToString(), true)); } else { return(defaultValue); } }
public bool Get <T>(PortfolioPosition position, ScalarAttribute attribute, DateTime dateTime) { ScalarStr str = GetScalarStr(position, attribute); if (str == null || !str.HasValue(dateTime)) { return(false); } return(true); }
public void Add(PortfolioPosition position, Enum enumeration, ScalarStr scalar) { KeyValuePair <PortfolioPosition, Enum> key = new KeyValuePair <PortfolioPosition, Enum>(position, enumeration); if (_strings.ContainsKey(key)) { _strings[key] = scalar; } else { _strings.Add(key, scalar); } }
public ScalarStr GetScalarStr(PortfolioPosition position, ScalarAttribute attribute) { var markets = _markets.Where(z => z.GetIMapping().FindAI(attribute)); foreach (var x in markets) { ScalarStr scalarStr = x.GetScalarStr(position, attribute); if (scalarStr != null) { return(scalarStr); } } return(null); }
public void TestScalarGet() { Dictionary <DateTime, string> dateTimes = new Dictionary <DateTime, string>() { { DateTime.Now, "bushuev" }, { DateTime.Now.AddDays(-1), "roman" }, { DateTime.Now.AddDays(1), "nik" } }; ScalarStr date = new ScalarStr(dateTimes); Assert.IsFalse(date.HasValue(DateTime.Now.AddDays(-2))); Assert.AreEqual(date.Get(DateTime.Now), "bushuev"); Assert.AreEqual(date.Get(DateTime.Now.AddDays(-1)), "roman"); Assert.AreEqual(date.Get(DateTime.Now.AddDays(100)), "nik"); }
public ScalarStr GetScalarStr(PortfolioPosition position, ScalarAttribute attribute) { if (!_mapping.FindAI(attribute)) { return(null); } KeyValuePair <PortfolioPosition, Enum> key = new KeyValuePair <PortfolioPosition, Enum>(position, attribute); if (_cache.ContainsKey(key)) { return((ScalarStr)_cache[key]); } string fif_id = _mapping.GetAI(attribute); ScalarStr scalarStr = null; string query = string.Format( @" SELECT fi.ident as ident, fd.dat_from as dat_from, fd.val as val from fin_instrument fi join ffd t on t.fi_id = fi.fi_id join data_source ds on t.ds_id = ds.ds_id join fisd_str fd on fd.fisd_id = t.fisd_id where fi.ident = '{0}' and t.fif_id = {1} and ds.ident = '{2}'" , position.Ident, fif_id, _providerParams[SCALAR]); var result = _dbLink.GetConnection().Query <fisdstring>(query); if (result == null || result.Count() == 0) { query = string.Format( @" SELECT fi.ident as ident, fd.dat_from as dat_from, fd.val as val from fin_instrument fi join ffd t on t.fi_id = fi.fi_id join data_source ds on t.ds_id = ds.ds_id join fisd_item fd on fd.fisd_id = t.fisd_id where fi.ident = '{0}' and t.fif_id = {1} and ds.ident = '{2}'" , position.Ident, fif_id, _providerParams[SCALAR]); result = _dbLink.GetConnection().Query <fisdstring>(query); } if (result != null && result.Count() != 0) { Dictionary <DateTime, string> values = new Dictionary <DateTime, string>(); foreach (var x in result) { values.Add(x.dat_from, x.val); } scalarStr = new ScalarStr(values); } _cache.Add(key, scalarStr); return(scalarStr); }
public ScalarEnum GetScalarEnum(PortfolioPosition position, ScalarAttribute attribute) { KeyValuePair <PortfolioPosition, Enum> key = new KeyValuePair <PortfolioPosition, Enum>(position, attribute); if (!_cache.ContainsKey(key)) { ScalarStr scalarStr = null; string fif_id = _mapping.GetAI(attribute); string query = string.Format( @"SELECT fi.ident, fd.dat_from, fd.val, * from fin_instrument fi join ffd t on t.fi_id = fi.fi_id join data_source ds on t.ds_id = ds.ds_id join fisd_item fd on fd.fisd_id = t.fisd_id where fi.ident = '{0}' and t.fif_id = {1} and ds.ident = '{2}'" , position.Ident, fif_id, _providerParams[SCALAR]); var result = _dbLink.GetConnection().Query <fisdstring>(query); if (result != null && result.Count() != 0) { Dictionary <DateTime, string> values = new Dictionary <DateTime, string>(); foreach (var x in result) { values.Add(x.dat_from, x.val); } scalarStr = new ScalarStr(values); } _cache.Add(key, scalarStr); } ScalarStr str = (ScalarStr)_cache[key]; if (str == null) { return(null); } //прочитаем все значения if (!_mapping.FindET(attribute)) { return(null); } Type type = _mapping.GetET(attribute); var bushuevs = Enum.GetValues(type).OfType <Enum>().OrderBy(z => z).ToList(); if (bushuevs.Count == 0) { return(null); } Dictionary <DateTime, Enum> enumerations = new Dictionary <DateTime, Enum>(); foreach (var x in str.Dictionary) { KeyValuePair <Type, string> keyEnum = new KeyValuePair <Type, string>(type, x.Value); if (_mapping.TKE.ContainsKey(keyEnum)) { Enum enumeration = _mapping.TKE[keyEnum]; enumerations.Add(x.Key, enumeration); } else { Enum enumeration = bushuevs.First(); enumerations.Add(x.Key, enumeration); } } ScalarEnum scalarEnum = new ScalarEnum(enumerations); //конвертируем их в соответствии с типом, если получается return(scalarEnum); }