Functions¶
IAlias person = sql.Alias("person");
Department dept = null;
IFunction func1 = sql.Function("TRIM").Add(person["Name"]);
IFunction func2 = sql.Function("SUBSTRING").Add(person["Name"], 1, 10);
IFunction func3 = sql.Function("SUBSTRING").Add(() => dept.Name, () => 1, () => 10);
Utility classes¶
SqlFn¶
This class allows you to create predefined functions that are registered by default in all supported engines:
IAlias person = sql.Alias("person");
IFunction func1 = SqlFn.Trim(person["Name"]);
IFunction func2 = SqlFn.Substring(person["Name"], 1, 10);
For lambda expression you have to use the Col method:
Person person = null;
IFunction func = SqlFn.Substring(sql.Col(() => person.Name), 1, 10);
Tip
To avoid this you can use the SqlExp utility class instead.
SqlExp¶
Alternative class to SqlFn for lambda expressions:
Person person = null;
IFunction func1 = sql.Val(() => SqlExp.Trim(person.Name));
IFunction func2 = sql.Val(() => SqlExp.Substring(person.Name, 1, 10));
Register functions¶
In your engine¶
You can register your functions in your engine to translate them with a different name or compile to SQL with a custom delegate.
For lambda expressions¶
You can register your functions in the ExpressionProcessor to compile the lambda expressions to an IQueryFragment.
Registered system functions¶
The following system functions are registered by default:
| Function | SQL |
|---|---|
string.StartsWith |
LIKE 'Value%' |
string.EndsWith |
LIKE '%Value' |
string.Contains |
LIKE '%Value%' |
Tip
Use SqlExp.Initialize(false) if you do not want to register system functions.