Don*_*n P 3 .net c# linq distinct
我的ASP.NET自定义列表控件从数据库中获取其值View.检索数据的方法最终返回类型的对象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();
}
Run Code Online (Sandbox Code Playgroud)
...或者我可以使用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();
}
Run Code Online (Sandbox Code Playgroud)
我还提出了以下内容,它使用了EqualityComparerTriplets 的特殊功能.实际上这是我的第一个方法,但我并不喜欢它:
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();
}
Run Code Online (Sandbox Code Playgroud)
我认为解决方案将大部分工作留给了数据库(MS SQL Server),这可能是一个优点或缺点.我真的不知道.也许Distict() - solutution会不得不将过多的不必要的数据从db推送到我的方法?
有任何想法应该实施吗?看来我因森林太多而无法看到森林......