Объект передачи данных с поиском O (1) - PullRequest
2 голосов
/ 13 марта 2011

Привет! Я хочу использовать объект передачи данных, полученный при чтении базы данных с использованием NHibenrate и имеющий около 1000 записей, и мне нужно осторожно использовать этот DTo, в котором на основе определенного ключа я выбираю значение.Мой DTO будет примерно таким.

public class DTO
{
    string name;
    int id;
    int schoolId;
    double value;
} 

Теперь проблема в том, что я получаю это как перечислимое. Теперь из этого перечислимого, основываясь на идентификаторе и имени школы, мне нужно выбрать значение, которое я делаю на данный момент, следующим образом:

 DtoList.Where(x=>x.name="name" && x.id=1 && x.schoolId=2).First();

Теперь проблема в том, что это поиск O (n), и я хочу, чтобы он был O (1), что можно сделать с помощью IDictionary.

Мне интересно, если яможет заставить это DTO реализовать IDitcionary и затем сделать то же самое.\

Возможно ли это?Я думаю, что это больше с точки зрения ac #.

Также с точки зрения NHibernate, как это будет работать.

1 Ответ

0 голосов
/ 13 марта 2011

Если вы создаете список один раз, а затем просматриваете его несколько раз, возможно, стоит создать другой объект, который будет состоять из словаря, и создать его из коллекции DTO:

struct Key
{
    string Name;
    int Id;
    int SchoolId;
}

class DictionaryObject
{
   IDictionary<Key, double> _dict;

   public DictionaryObject(IEnumerable<Dto> dtoList)
   {
      _dict = dtoList.ToDictionary(
             o => new Key { Name = o.Name, Id = o.Id, SchoolId = o.SchoolId },
             o => o.Value);
   }

   double GetValue(string Name, int Id, int SchoolId)
   {
      // if the key exists then...
      return _dict[new Key { Name = Name, Id = Id, SchoolId = SchoolId }];
   }

   ...
}
...