Exemple #1
0
        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)));
        }
Exemple #2
0
 public IEnumerable <CardModel> SelectCardModels(params string[] conditions)
 {
     return(from DataRow row in SelectCards(conditions).Rows
            select CardModel.FromDataRow(this, row));
 }