Thursday, 17 October 2019

Entity framework dynamic query generation

using (var cmd = _unitOfWork.DbContext.Database.Connection.CreateCommand())
            {
                if (cmd.Connection.State != ConnectionState.Open)
                    cmd.Connection.Open();

                cmd.CommandText = _queryBuilder.SelectOnTable(level1RepoFieldsTable, selectColumns)
                    .WhereConditions(searchFields?.ToCompareConditions(repositoryFields).ToList())
                    .OrderBys(sortFields == null
                        ? new List<OrderBy>
                        {
                            new OrderBy {Column = Constants.IdentityColumn, Direction = OrderByDirection.Descending}
                        }
                        : sortFields.ToOrderBys(repositoryFields).ToList())
                    .CreateRawSql();

                using (var dataReader = cmd.ExecuteReader())
                {
                    while (dataReader.Read())
                    {
                        var recordId = dataReader.GetColumnValue<int>(Constants.IdentityColumn);

                        if (recordId == 0)
                            continue;

                        var tdxRecord = _tdxRecordRepository.FindBy(x => x.Id == recordId)
                            .FirstOrDefault();

                        if (tdxRecord != null)
                        {
                            tdxRecord.RecordFields = dataReader.GetRecordFields(repositoryFields).ToList();
                            tdxRecords.Add(tdxRecord);
                        }

                        if (getFirstMatchingRecord) break;
                    }
                }
            }

No comments:

Post a Comment