This may not help you, but our team puts complex queries into a stored proc, and if necessary, uses Linq to filter out what we don't want in the app. That leaves the queries (that sql server is optimized to perform well) in the database, and is realizes significantly reduced Linq complexity and performance hit in the C# code. It also lets us deploy just database changes if the complex query needs to be adjusted.
Finally, your query seems overly complex. Wouldn't this do the job as well:
WHERE (UserRole = 'HOD' AND IsApproved = 1)
OR (UserRole = 'Finance' AND IsApproved = 0)