{"record":{"id":"ce95091c3a56770a","repo":"litedb-org/LiteDB","slug":"operator-not-supported-nodetype","errorCode":null,"errorMessage":"Operator not supported {nodeType}","messagePattern":"Operator not supported (.+?)","errorType":"exception","errorClass":"NotSupportedException","httpStatus":null,"severity":"error","filePath":"LiteDB/Client/Mapper/Linq/LinqExpressionVisitor.cs","lineNumber":623,"sourceCode":"            switch (nodeType)\n            {\n                case ExpressionType.Add: return \" + \";\n                case ExpressionType.Multiply: return \" * \";\n                case ExpressionType.Subtract: return \" - \";\n                case ExpressionType.Divide: return \" / \";\n                case ExpressionType.Equal: return \" = \";\n                case ExpressionType.NotEqual: return \" != \";\n                case ExpressionType.GreaterThan: return \" > \";\n                case ExpressionType.GreaterThanOrEqual: return \" >= \";\n                case ExpressionType.LessThan: return \" < \";\n                case ExpressionType.LessThanOrEqual: return \" <= \";\n                case ExpressionType.And: return \" AND \";\n                case ExpressionType.AndAlso: return \" AND \";\n                case ExpressionType.Or: return \" OR \";\n                case ExpressionType.OrElse: return \" OR \";\n            }\n\n            throw new NotSupportedException($\"Operator not supported {nodeType}\");\n        }\n\n        /// <summary>\n        /// Returns document field name for some type member\n        /// </summary>\n        private string ResolveMember(MemberInfo member, out MemberMapper memberMapper)\n        {\n            var name = member.Name;\n\n            // checks if parent field are not DbRef (checks for same dataType)\n            var isParentDbRef = _dbRefType != null && member.DeclaringType.IsAssignableFrom(_dbRefType);\n\n            // get class entity from mapper\n            var entity = _mapper.GetEntityMapper(member.DeclaringType);\n            entity.WaitForInitialization();\n\n            // get mapped field from entity\n            var field = entity.Members.FirstOrDefault(x => x.MemberName == name);","sourceCodeStart":605,"sourceCodeEnd":641,"githubUrl":"https://github.com/litedb-org/LiteDB/blob/f906a5f850678719e39a39a006cb66dcae563cfa/LiteDB/Client/Mapper/Linq/LinqExpressionVisitor.cs#L605-L641","documentation":"Thrown by GetOperator when a BinaryExpression uses an ExpressionType not in the supported set. Supported operators: Add (+), Multiply (*), Subtract (-), Divide (/), Equal (=), NotEqual (!=), GreaterThan (>), GreaterThanOrEqual (>=), LessThan (<), LessThanOrEqual (<=), And/AndAlso (AND), Or/OrElse (OR). Any other binary operator triggers this error.","triggerScenarios":"Using a binary operator not in the supported list: Modulo (%), ExclusiveOr (^), LeftShift (<<), RightShift (>>), Power, Coalesce (?? handled separately), ArrayIndex ([] handled separately), AddChecked, MultiplyChecked, etc. For example x => x.Value % 2 == 0.","commonSituations":"Using modulo, bitwise XOR, or bit-shift operations in LINQ queries. Using checked arithmetic (AddChecked, etc.) in debug builds or certain compiler configurations. Assuming all C# binary operators have BsonExpression equivalents.","solutions":["Avoid unsupported binary operators in LINQ queries; compute the value in memory and compare against a constant.","For modulo or bitwise logic, fetch matching records with a broader predicate and filter in memory.","Use a raw BsonExpression if the equivalent operation exists in BsonExpression syntax."],"exampleFix":"// before -- modulo is not supported\ncol.Find(x => x.Value % 2 == 0);\n\n// after -- precompute or filter in memory\nvar results = col.FindAll().Where(x => x.Value % 2 == 0).ToList();","handlingStrategy":"validation","validationCode":"// Avoid unsupported binary operators in LINQ queries\n// Supported: +, -, *, /, =, !=, >, >=, <, <=, AND, OR\n// Unsupported: %, ^, <<, >>, and checked variants\nvar results = col.FindAll().Where(x => x.Value % 2 == 0).ToList();","typeGuard":"// Check that a binary expression uses only supported operators\nstatic readonly HashSet<ExpressionType> SupportedOperators = new()\n{\n    ExpressionType.Add, ExpressionType.Multiply, ExpressionType.Subtract, ExpressionType.Divide,\n    ExpressionType.Equal, ExpressionType.NotEqual, ExpressionType.GreaterThan,\n    ExpressionType.GreaterThanOrEqual, ExpressionType.LessThan, ExpressionType.LessThanOrEqual,\n    ExpressionType.And, ExpressionType.AndAlso, ExpressionType.Or, ExpressionType.OrElse\n};","tryCatchPattern":"try\n{\n    var results = col.Find(x => x.Value % 2 == 0);\n}\ncatch (NotSupportedException ex) when (ex.Message.Contains(\"Operator not supported\"))\n{\n    results = col.FindAll().Where(x => x.Value % 2 == 0).ToList();\n}","preventionTips":["Avoid modulo (%), bitwise XOR (^), and bit-shift (<<, >>) operators in LINQ queries.","Precompute values that require unsupported operators and compare against constants.","Familiarize yourself with the supported operator set: +, -, *, /, =, !=, >, >=, <, <=, AND, OR."],"tags":["linq","binary-operator","expression"],"backgroundTag":null,"analyzedSha":"f906a5f850678719e39a39a006cb66dcae563cfa","analyzedAt":"2026-08-13T21:56:30.148Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}