protected void Select(IList list) { MSSQLField[] readables = table.GetFields(FieldFlags.Read); StringBuilder sql = new StringBuilder(); sql.Append("SELECT "); if (distinct) { sql.Append("DISTINCT "); } if (selectTop > 0) { sql.Append("TOP ").Append(selectTop).Append(" "); } bool first = true; foreach (MSSQLField f in readables) { if (!first) { sql.Append(","); } first = false; sql.Append(database.QuoteName(f.Name)); } sql.Append(" FROM ").Append(table.QuotedName); if (where.Length > 0) { sql.Append(" WHERE ").Append(where.ToString()); } ForEachCallback callback = new ForEachCallback(delegate(IRow row) { object obj = table.NewObject(); object value = null; int i = 0; foreach (MSSQLField f in readables) { value = row[i++]; if (Convert.IsDBNull(value)) { value = null; } f.SetValue(obj, value); } list.Add(obj); }); using (MSSQLStatement stmt = database.Prepare(sql.ToString()) as MSSQLStatement) using (IQueryResult result = stmt.ExecQuery(values.ToArray())) { result.ForEach(callback); } }