Пример #1
0
        public Expression GetFilterExpression(ParameterExpression itemPram, FilterComparisonOperator comparisonOperator, string valueString)
        {
            var getterMemberExpr = _reader.GetSelectExpression(itemPram);

            if (getterMemberExpr == null)
            {
                throw new InvalidCastException("Getter expression returned from IFieldReader is not of type MemberExpression.");
            }

            object             valueObj           = ConversionUtility.ConvertString(valueString, _reader.FieldType);
            ConstantExpression variableExpression = Expression.Constant(valueObj, _reader.FieldType); // TODO variable not constant?

            var        operatorMethod      = GetOperatorExpressionMethod(comparisonOperator);
            Expression predicateExpression = operatorMethod.Invoke(getterMemberExpr, variableExpression);

            return(predicateExpression);
        }
Пример #2
0
        public MemberInitExpression Build <TItem>(ParameterExpression itemPram, IFieldProvider <TItem> fieldProvider)
            where TItem : class
        {
            return(Build(delegate(FieldInfo fi)
            {
                IFieldReader <TItem> reader = fieldProvider.GetReader(fi.Name);
                Debug.Assert(reader != null, "Reader should definitely not be null here.");

                return Expression.Bind(fi, reader.GetSelectExpression(itemPram));
            }));
        }
Пример #3
0
        public MemberInitExpression Build <TItem>(ParameterExpression itemPram, IDictionary <string, IFieldReader <TItem> > fieldReaders)
            where TItem : class
        {
            return(Build(delegate(FieldInfo fi)
            {
                Debug.Assert(fieldReaders.ContainsKey(fi.Name));

                IFieldReader <TItem> reader = fieldReaders[fi.Name];

                return Expression.Bind(fi, reader.GetSelectExpression(itemPram));
            }));
        }
Пример #4
0
        /// <summary>
        /// Loads a single scalar field reader from a single <see cref="itemQuery"/>.
        /// </summary>
        public static async Task <object> LoadScalarValueAsync <TItem>([NotNull] IFieldReader <TItem> reader, IQueryableSingle <TItem> itemQuery, ForEachAsyncDelegate <object> forEachAsync)
        {
            if (reader == null)
            {
                throw new ArgumentNullException(nameof(reader));
            }

            ParameterExpression itemPram         = Expression.Parameter(typeof(TItem), "itm");
            Expression          selectExpression = reader.GetSelectExpression(itemPram);

            IQueryable selectScalarOnlyQuery = ExpressionTreeHelpers.GetSelectExpressionQuery(itemQuery, itemPram, selectExpression);
            object     loadedValue           = await ItemQueryHelper.SingleOrCreateAsync(selectScalarOnlyQuery, forEachAsync, () => throw new ParentItemNotFoundException());

            if (reader.Replacer != null)
            {
                await reader.Replacer.LoadAsync(itemQuery);

                return(reader.Replacer.GetReplacement(loadedValue));
            }

            return(loadedValue);
        }
Пример #5
0
 public Expression GetSelectExpression(ParameterExpression itemPram)
 {
     return(_fieldReaderImplementation.GetSelectExpression(itemPram));
 }