public override int Delete(ITransaction transaction, ClassMapping mapping, DaoCriteria crit)
{
// Find all the records that don't match, and just keep those.
DaoCriteria inverseCrit = new DaoCriteria();
foreach (IExpression expr in crit.Expressions)
{
inverseCrit.Expressions.Add(expr.Invert());
}
IDictionary<string, MemoryObject> table = GetTable(mapping);
int retVal;
lock (table)
{
int oldCount = table.Count;
MemoryDataReader reader = new MemoryDataReader(this, mapping, inverseCrit,
table.Values.GetEnumerator());
IDictionary<string, MemoryObject> tempTable = new Dictionary<string, MemoryObject>();
while (reader.Read())
{
MemoryObject keeper = reader.GetCurrentObject();
tempTable[keeper.GetKey()] = keeper;
}
table.Clear();
foreach (KeyValuePair<string, MemoryObject> kvp in tempTable)
{
table.Add(kvp);
}
retVal = oldCount - table.Count;
}
return retVal;
}