我的ASP.NET自定义列表控件从数据库视图中获取其值.检索数据的方法最终返回List< Triplet>类型的对象.作为控件的DataSource.
我想出了该方法的三种可能的实现方式,它们似乎都能正常工作并给出相同的结果.现在我不确定哪一个应该是首选.
关键是,我需要按字母顺序查询查询中的唯一字符串,并且db中有许多重复项.所以我可以获取它们然后执行distinct()以获取唯一值…
public override object GetData() { return ( from name in ( from job in DBConnection.NewDataContext.vJobs where job.name != null select job.name ).distinct().OrderBy(s => s) select new Triplet(name,name,ListType) ).ToList(); }
…或者我可以使用group by子句,只选择键:
public override object GetData() { return ( from job in DBConnection.NewDataContext.vJobs where job.name != null group job by job.name into names orderby names.Key select new Triplet(names.Key,names.Key,ListType) ).ToList(); }
我还想出了以下内容,它为Triplets使用了一个特殊的EqualityComparer.实际上这是我的第一个方法,但我并不喜欢它:
public override object GetData() { return ( from job in DBConnection.NewDataContext.vJobs where job.name != null select new Triplet(job.name,job.name,ListType) ).ToList().distinct(new TripletComparer()).OrderBy(t => (string)t.First).ToList(); }
我认为解决方案将大部分工作留给了数据库(MS sql Server),这可能是一个优点或缺点.我真的不知道.也许distict() – solutution会不得不将过多的不必要的数据从db推送到我的方法?
有任何想法应该实施吗?看来我因森林太多而无法看到森林……
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。