private static AstFilterField TranslateWithIntIndex(TranslationContext context, MethodCallExpression expression, MethodInfo method, Expression fieldExpression, int index) { var field = ExpressionToFilterFieldTranslator.TranslateEnumerable(context, fieldExpression); if (field.Serializer is IBsonArraySerializer arraySerializer && arraySerializer.TryGetItemSerializationInfo(out var itemSerializationInfo)) { var itemSerializer = itemSerializationInfo.Serializer; if (method.ReturnType.IsAssignableFrom(itemSerializer.ValueType)) { return(field.SubField(index.ToString(), itemSerializer)); } } throw new ExpressionNotSupportedException(expression); }
public static AstFilterField Translate(TranslationContext context, MethodCallExpression expression) { var method = expression.Method; var arguments = expression.Arguments; if (method.IsStatic && method.Name == "First" && arguments.Count == 1) { var enumerableFieldAst = ExpressionToFilterFieldTranslator.TranslateEnumerable(context, arguments[0]); if (enumerableFieldAst.Serializer is IBsonArraySerializer arraySerializer && arraySerializer.TryGetItemSerializationInfo(out var itemSerializationInfo)) { var itemSerializer = itemSerializationInfo.Serializer; if (method.ReturnType.IsAssignableFrom(itemSerializer.ValueType)) { return(enumerableFieldAst.SubField("0", itemSerializer)); } } } throw new ExpressionNotSupportedException(expression); }