private void BuildCollectionHashing(List <Expression> expressions, List <ParameterExpression> variables, MemberExpression collMember, ParameterExpression hashVariable, Type itemType, int prime2) { var colhashVar = Expression.Parameter(typeof(int)); var currentItem = Expression.Parameter(itemType); variables.Add(colhashVar); expressions.Add(Expression.Assign(colhashVar, Expression.Constant(_configuration.ColPrime1, typeof(int)))); expressions.Add(Expression.IfThen( Expression.NotEqual( collMember, Expression.Default(collMember.Type) ), collMember.ForEach(currentItem, BuildItemHashing(currentItem, itemType, colhashVar, _configuration.ColPrime2) ) )); expressions.Add(Expression.Assign( hashVariable, Expression.ExclusiveOr( Expression.Multiply( hashVariable, Expression.Constant(prime2, typeof(int)) ), colhashVar ) )); }