打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
linq Distinct的一个简单实现方法
linq Distinct
[javascript]
IEnumerable<List<Models.ReportName>> query1 = from e in jv
group e by new { e.ReportId } into g
select g.ToList();
这段代码可以得到一个范型的集合(根据reportId分组后的范型集合),通过foreach能够取出进行操作。
[html]
foreach (List<ReportName> reportNames in query1)
{
reportNameTemp = new ReportName();
reportNameTemp.ReportList = new List<ReportList>();
foreach (ReportName reportName in reportNames)
{
childReportName = new ReportList();
childReportName.Name = reportName.Name;
reportNameTemp.ReportList.Add(childReportName);
reportNameTemp.ReportSetName = reportName.ReportSetName;
reportNameTemp.ReportId = reportName.ReportId;
}
emptyList.Add(reportNameTemp);
}
参考文章:http://blog.csdn.net/fangxinggood/article/details/6187043
Linq 用来实现集合(List, DataTable等) 的二次操作十分简便,这里介绍下用 Linq 对集合进行 Distinct 操作的几种方法。
0. 准备数据:
+ expand sourceview plain
1. 使用GroupBy:对需要Distinct的字段进行分组,取组内的第一条记录这样结果就是Distinct的数据了。
view plain
Console.WriteLine("Distinct1 By: A");
var query1 = from e in User.GetData()
group e by new { e.A } into g
select g.FirstOrDefault();
foreach (var u in query1)
Console.WriteLine(u.ToString());
2. 使用Distinct()扩展方法:需要实现IEqualityComparer接口。
view plain
class UserCompare : IEqualityComparer<User>
{
public bool Equals(User x, User y)
{
return (x.A == y.A && x.B == y.B);
}
public int GetHashCode(User obj)
{
// return obj.GetHashCode();
return obj.ToString().ToLower().GetHashCode();
}
}
view plain
Console.WriteLine("Distinct2 By: A,B");
var compare = new UserCompare();
var query2 = User.GetData().Distinct(compare);
foreach (var u in query2)
Console.WriteLine(u.ToString());
上面的实现中要注意GetHashCode()方法直接用obj.GetHashCode()的话,Distinct不能正常运行。
3. 自定义扩展方法DistinctBy(this IEnumerable source, Func keySelector)
view plain
public static class MyEnumerableExtensions
{
public static IEnumerable<TSource> DistinctBy<TSource, TKey>
(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector)
{
HashSet<TKey> seenKeys = new HashSet<TKey>();
foreach (TSource element in source)
{
if (seenKeys.Add(keySelector(element))) { yield return element; }
}
}
}
view plain
Console.WriteLine("Distinct3 By: A,B,C");
var query3 = User.GetData().DistinctBy(x => new { x.A, x.B, x.C });
foreach (var u in query3)
Console.WriteLine(u.ToString());
运行结果:
A   B   C   D
a2,b1,c1,d1
a1,b2,c1,d1
a1,b1,c1,d1
a1,b1,c2,d1
a1,b1,c1,d2
----------------
Distinct1 By: A
a1,b1,c1,d1
a2,b1,c1,d1
----------------
Distinct2 By: A,B
a1,b1,c1,d1
a2,b1,c1,d1
a1,b2,c1,d1
a1,b1,c2,d1
a1,b1,c1,d2
----------------
Distinct3 By: A,B,C
a1,b1,c1,d1
a2,b1,c1,d1
a1,b2,c1,d1
a1,b1,c2,d1
----------------
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
c#使用linq移除列表中的重复项
linq 动态列名排序
C#?Equals的重写
C#语法最基础知识
什么是IQueryable?
遍历Newtonsoft.Json.Linq.JObject
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服