string.Substring(index, length) behaves different in linq2nh and linq2obj. It is because in sql substring's parameter index is one-based and in C# is zero-based.
So following query would produce unexpeced sql
from e in db.Employees
where e.FirstName.Substring(1) == "An"
NOTE: should be substring(employee0_.FirstName, @p0+1, @p1)
And Substring(index) for following query also generates incorrect sql
substring(employee0_.FirstName, 0, @p0)=@p1;
@p2 = 1 Type: Int32 (0), @p1 = 'An'
NOTE: should be substring(employee0_.FirstName, @p0+1, len(employee0_.FirstName)-@p0)