This is much better handled in languages with pattern matching. And you can match on arbitrary fields.
Erlang:
surf(Channels) ->
lists:foreach(fun process/1, Channels).
process(#channel{genre = "football"} = Channel) ->
record(Channel);
process(#channel{genre = "comedy", repeat = false} = Channel) ->
record(Channel);
process(#channel{genre = "crime", show_title = "Cops"}) ->
skip;
process(#channel{genre = "crime"} = Channel) ->
record(Channel);
process(_) ->
skip.
Full gist: http://gist.github.com/250304