具有O(1)查找的数据传输对象

时间:2011-03-13 17:23:13

标签: c# nhibernate dto

您好 我想使用通过使用NHibenrate读取数据库得到的datatransfer对象,它有1000条记录,我需要仔细使用这个DTo,其中基于某个键我选择一个值。我的DTO将是这样的。

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

现在的问题是我把它作为一个可枚举的...现在从这个基于schoolid id和name的枚举我需要选择一个我现在所做的值,如下所示:

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

现在问题是它是一个O(n)查找,我希望它是O(1),这可以通过使用IDictionary来完成。

我想知道我是否可以让这个DTO实现IDitcionary,然后再做同样的事情。 \

这可能吗?我认为这更多来自c#的观点。

同样从NHibernate的角度来看,这将如何解决。

1 个答案:

答案 0 :(得分:0)

如果您构建一次列表然后多次查找,也许值得创建另一个对象,它将包含一个字典,并从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 }];
   }

   ...
}