Loop statement (foreach)
BI# is built for data-heavy applications and its foreach
statement allows iteration over large sets of data. This example of a function uses the foreach
statement to loop over the result set of an SQL query:
void Process(SQLConnection connection)
{
SQLData resultData = SQLExecuteQuery(
connection,
"Select * from employees"
);
foreach (SQLDataRow row in resultData)
{
string name = SQLDataRowGetString(row,"name");
WriteLine("Name: " + name);
}
}
When iterating over lists of data you often must filter elements. You can use if
statements for this purpose, but foreach
supports a where clause that solves this problem more elegantly:
void Process(OLAPConnection con)
{
OLAPElementList list = OLAPGetElementList(con,"DACOUNT", true);
foreach (OLAPElement account in list
where OLAPGetStringAttribute(account, "ALRE") == "A")
{
// Do something with account.
}
}
The foreach
statement has this structure:
foreach (<type> <name> in <list expression>
[where <condition>]) <block>
The statement creates a local variable named name
of the specified type. For each iteration, BI# fills this variable with the next item from the list
expression. For every list type, BI# allows a certain set of iterator variable types. This table lists possible combinations of iterator variable types and list types:
List Type | Iterator Variable Type |
---|---|
OLAPElementList |
OLAPElement |
OLAPDataArea |
OLAPCell |
SQLData |
SQLDataRow |
StringArray |
String |
OLAPElementNativeArray |
OLAPElementNative |
OLAPElementXMLAArray |
OLAPElementXMLA |
OLAPAttributeTable |
OLAPAttribute |
OLAPCubeList |
OLAPCube |
OLAPDimensionList |
OLAPDimension |
OLAPAttributeTableList |
OLAPAttributeTable |
If you do not specify a where
clause or if the where
clause's condition is true, BI# runs the loop's block. Otherwise, it starts the next iteration.