Look at this Linq to Nhibernate code, and see how it is translated to sql for Microsoft Access database:


Session.Query().Join(Session.Query()
    ,  q => q.MiniDbName.ToUpper(),      o => o.MiniDatabaseName.ToUpper(),
    (q, o) => new { Record = q, Order = o.OrderValue });

The previous code, will query two tables based on their entities, and join them based on the Upper value of the two columns.
How it is translated to sql?
as below:



select printqueue0_.PK_ID as PK1_3_, ........ 
from RLPrintQueue printqueue0_, RLPrintOrder printorder1_ 
where ucase(printorder1_.MiniDatabaseName)=ucase(printqueue0_.MiniDbName) 
order by printorder1_.OrderValue asc

What the NHibernate driver did, is to translate the Linq function ToUpper, to MSAccess function "UCase"

I just found it with some trial and error.
I am wondering what other functions will be transferred through the database driver to vendor-specific functions.