您好 我想使用通过使用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的角度来看,这将如何解决。
答案 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 }];
}
...
}