public IEnumerable <CardModel> SelectRandomCardModels(int count, params string[] conditions) { if (count < 0) { throw new ArgumentOutOfRangeException("count"); } if (count == 0) { return(Enumerable.Empty <CardModel>()); } DataTable table = SelectCards(conditions); IEnumerable <DataRow> candidates; if (table.Rows.Count <= count) { candidates = table.Rows.Cast <DataRow>(); } else { var rnd = new Random(); IEnumerable <int> indexes = from i in Enumerable.Range(0, table.Rows.Count) let pair = new KeyValuePair <int, double>(i, rnd.NextDouble()) orderby pair.Value select pair.Key; candidates = from i in indexes.Take(count) select table.Rows[i]; } return(candidates.Select(r => CardModel.FromDataRow(this, r))); }
public IEnumerable <CardModel> SelectCardModels(params string[] conditions) { return(from DataRow row in SelectCards(conditions).Rows select CardModel.FromDataRow(this, row)); }