您的位置:首页 > 其它

如何使用Linq或EF来对数据去重——Distinct方法详解

2014-09-18 10:53 573 查看
刚开始接触LINQ时使用distinct去重时和大家一样遇到了一些麻烦,很感谢 http://www.cnblogs.com/A_ming/archive/2013/05/24/3097062.html 提供的一些方法。

后来经过深入学习,了解了一些更为简洁的方法,在这里与大家一同分享。



如上图在WebConfig表中含有以下三个字段Name,Linkhref和Type,现在我们要对Type去重获取所有类型。

第一种使用Distinct方法:

ViewBag.Dist = db.WebConfig.Select(p => p.Type).Distinct().ToList();


使用这种方法筛选出来的是一个string集合

前台展示:

<ul>
@foreach (string dist in ViewBag.Dist)
{
<li>@dist</li>
}
</ul>


第二种使用DistinctBy方法:

ViewBag.Dist1 = db.WebConfig.DistinctBy(p => p.Type).ToList();


使用这种方法筛选出来的是一个Model类型(WebConfig)

前台展示:

<ul>
@foreach (WebConfig dist1 in ViewBag.Dist1)
{
<li>@dist1.Type</li>
}
</ul>


第三种使用GroupBy方法:

ViewBag.Dist2 = db.WebConfig.GroupBy(p => p.Type).Select(p=>p.Key).ToList();


使用这种方法筛选出来的是一个键值对(<string,WebConfig>)

前台展示:

<ul>
@foreach (string dist2 in ViewBag.Dist2)
{
<li>@dist2</li>
}
</ul>


todictionary:

var m = db.D_Annotation.Where(p => p.DocumentID == id).GroupBy(p => p.ProofreadType).Select(p => new
{
p.Key,
CompletedCount = p.Sum(a => a.IsCompleted),
TotalCount = p.Count()
})
.ToDictionary(p => p.Key,
p =>
new Dictionary<string, object>
{
{"CompletedCount", p.CompletedCount},
{"TotalCount", p.TotalCount}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: