FuncIN
the same function as the equality comparison in SQL Builder function limitations SQLWhereLanguageDef.
Parameters GetFunction
GetFunction takes one parameter: an array of variable definition (Variable Def) and the objects among which the search is performed.
Example usage
Let’s consider an example. Required to deduct all Кредиты
issued special clients, the list of keys which are known to us.
The SQL statement would look as follows:
SELECT * FROM Кредиты WHERE Клиент IN ('{IDList}')@@
Где {IDList} - список [Primary-keys-objects|первичных ключей) искомых `Клиентов`
List<Клиент> клиенты = new List<Клиент>();
SQLWhereLanguageDef langdef = SQLWhereLanguageDef.LanguageDef;
List<object> clientKeys = new List<object>();
clientKeys.Add(new VariableDef(langdef.GuidType, Information.ExtractPropertyPath<Кредит>(x => x.Клиент)));
foreach (var клиент in клиенты)
clientKeys.Add(клиент.__PrimaryKey);
Function lf = langdef.GetFunction(langdef.funcIN, clientKeys.ToArray());
Features string comparison
The fact that MS SQL Sever follows the standard ANSI 92 SQL in regard to string comparisons.
To determine whether strings of unequal length, especially on the right side the shorter string adds spaces, so the string lengths become equal.
Then the symbols in the first string are compared with characters of the second with regard to their location. If not equal at least one pair, the strings are considered unequal.
This applies to comparisons such as WHERE strfield = ‘…’, or HAVING strfield=’…’, or strfield IN (‘…’, ‘…’, …). In these cases, the string ‘abc’ and ‘abc’ are considered equal.
The exception is the operator LIKE
(WHERE strfield LIKE ‘…’), for it is the string ‘abc’ and ‘abc’ is different, therefore, to impose restrictions on the lines, instead of FuncIN
you should use a combination of functions FuncOR, FuncLike.