/// <inheritdoc /> public override void New() { if (_typeAccessor.CreateNewSupported) { Instance = (TTarget)_typeAccessor.CreateNew(); } }
public void FastMember_Constructor() { var obj1 = (BenchmarkObject)TypeAccessor.CreateNew(); var obj2 = (BenchmarkObject2)TypeAccessor2.CreateNew(); var obj3 = (BenchmarkObject3)TypeAccessor3.CreateNew(); var obj4 = (BenchmarkObject4)TypeAccessor4.CreateNew(); }
/// <summary> /// Execute SP that return a result set /// </summary> /// <param name="items">return result set</param> /// <param name="accessor">Type Accessor for a single item value</param> /// <param name="command">executive command</param> private void ExecuteReaderToList(IList items, TypeAccessor accessor, IDbCommand command) { command.Prepare(); _queryTime?.Start(); using (var reader = command.ExecuteReader()) { _queryTime?.Stop(); int columns = reader.FieldCount; foreach (var record in reader.ToRecord()) { var item = accessor.CreateNew(); items.Add(item); ExtractObject(columns, item, accessor, record); } } }
public static void AddValues(this SearchResult searchResult, TypeAccessor typeAccessor, DocumentSearchResult <Document> results) { var members = typeAccessor.GetMembers(); results.Results.ToList().ForEach(r => { var item = typeAccessor.CreateNew(); foreach (var d in r.Document) { PopulateField(typeAccessor, item, members, d); } searchResult.Values.Add(new SearchResultModel { Score = r.Score, Value = item }); }); }
public T MapDataRecord <T>(IDataRecord dataRecord) { if (_typeAccessor == null) { _typeAccessor = TypeAccessor.Create(typeof(T)); } if (_propertyMappers == null) { _propertyMappers = CreatePropertyMappers(dataRecord); } var instance = _typeAccessor.CreateNew(); foreach (var mapper in _propertyMappers) { var fieldValue = mapper.MapProperty(dataRecord); _typeAccessor[instance, mapper.PropertyName] = fieldValue; } return((T)instance); }
public object TypeAccessorCreateNew() { return(_accessor.CreateNew()); }
/// <summary> /// Retrieves the specified columns from the SAP table /// </summary> public List <T> Select(IEnumerable <string> columns) { var invalidColumns = columns.Where(c => !_memberByAlias.ContainsKey(c)); if (!invalidColumns.IsEmpty()) { throw new ArgumentException($"The following columns don't exist in the table (did you forget an Alias?): {invalidColumns.Join()}"); } var resultingRows = new List <string[]>(); var sapWhereClauses = _condition .ToWhereBatched(_batchSize) //Split by spaces (SAP doesn't like incomplete words per line!) .Select(w => w.Split(' ')); if (sapWhereClauses.IsEmpty()) { //If no conditions are set ensure that we execute once sapWhereClauses = new List <string[]>() { new string[] { "" } }; } //Retrieve records parallely Parallel.ForEach(sapWhereClauses, new ParallelOptions() { MaxDegreeOfParallelism = _peakConnectionsLimit }, sapWhereClause => { //Source: https://stackoverflow.com/questions/20046390/how-to-get-result-of-a-rfc var rfc = _conn.Repository.CreateFunction("/BODS/RFC_READ_TABLE2"); var delimeter = 'Æ'; //Start filling parameters rfc.SetValue("QUERY_TABLE", _tableName); rfc.SetValue("DELIMITER", delimeter); var fields = rfc.GetTable("FIELDS"); foreach (var column in columns) { fields.Append(); fields.SetValue("FIELDNAME", column); } if (sapWhereClause.Count() == 1 && sapWhereClause.First().IsEmpty()) { //No conditions, derivatively left blank } else { var options = rfc.GetTable("OPTIONS"); foreach (var option in sapWhereClause) { options.Append(); options.SetValue("TEXT", option); } } //Get tresults try { rfc.Invoke(_conn); } catch (Exception e) { if (e.Message == "FIELD_NOT_VALID") { throw new ArgumentException("A selected column isn't valid, check that all the selected columns are correctly written."); } else if (e.Message == "A dynamically specified column name is unknown.") { throw new ArgumentException("A column in the WHERE clause isn't correctly written or doesn't exist."); } else if (e.Message == "A condition specified dynamically has an unexpected format.") { throw new ArgumentException("There's a syntax error in the WHERE clause, please check."); } throw; } var rows = Enumerable.Empty <IRfcDataContainer>() .Concat(rfc.GetTable("TBLOUT128")) .Concat(rfc.GetTable("TBLOUT512")) .Concat(rfc.GetTable("TBLOUT2048")) .Concat(rfc.GetTable("TBLOUT8192")) .Concat(rfc.GetTable("TBLOUT30000")) .Select(r => r.GetString("WA").Split(delimeter)) .ToList(); lock (resultingRows) { resultingRows.AddRange(rows); } }); return(resultingRows .Select(r => { var parsedRowInstance = _accesor.CreateNew() as T; var i = 0; foreach (var column in columns) { var member = _memberByAlias[column]; var value = Convert.ChangeType(r[i].Trim(), member.Type); //Everything is trimmed! _accesor[parsedRowInstance, member.Name] = value; i++; } return parsedRowInstance; }) .ToList()); }
public BenchmarkObject FastMember_Constructor() { return((BenchmarkObject)TypeAccessor.CreateNew()); }
public async Task <IEnumerable <T> > QueryAsync <T>(IEnumerable <QueryParameter> queryParameters, Type type, IGraphRequestContext graphRequestContext) where T : class { var searchResultModels = new List <SearchResultModel>(); var client = InternalGetInfo(type.Name, graphRequestContext).SearchIndexClient; var searchParameters = new SearchParameters(); var searchTextParam = queryParameters.Single(x => x.MemberModel.Name == "searchtext"); var results = await client.Documents.SearchAsync((string)searchTextParam.ContextValue.GetFirstValue(), searchParameters); TypeAccessor accessor = TypeAccessor.Create(type); var members = accessor.GetMembers(); results.Results.ToList().ForEach(r => { var item = accessor.CreateNew(); r.Document.ToList().ForEach(d => { var field = members.Single(x => x.Name == d.Key); object value = d.Value; if (field.Type == typeof(Guid) && value is string strValue) { value = Guid.Parse(strValue); } if (field.Type == typeof(decimal) && value is double dobValue) { value = Convert.ToDecimal(dobValue); } if (field.Type == typeof(DateTime) && value is DateTimeOffset dtmValue) { value = dtmValue.DateTime; } if (field.Type == typeof(int)) { value = Convert.ToInt32(value); } if (field.Type == typeof(long)) { value = Convert.ToInt64(value); } accessor[item, d.Key] = value; }); var searchResultModel = new SearchResultModel { Score = r.Score, Value = item }; searchResultModels.Add(searchResultModel); }); return(searchResultModels.Select(x => x as T).ToList()); }