当一个结合中想根据某一个字段做去重方法时使用以下代码
IQueryable 继承自IEnumerable
先举例:
#region linq to object ListpeopleList = new List ();peopleList.Add(new People { UserName = "zzl", Email = "1" });peopleList.Add(new People { UserName = "zzl", Email = "1" });peopleList.Add(new People { UserName = "lr", Email = "2" });peopleList.Add(new People { UserName = "lr", Email = "2" });Console.WriteLine("用扩展方法可以过滤某个字段,然后把当前实体输出");peopleList.DistinctBy(i => new { i.UserName }).ToList().ForEach(i => Console.WriteLine(i.UserName + i.Email));Console.WriteLine("默认方法,集合中有多个字段,当所有字段发生重复时,distinct生效,这与SQLSERVER相同");peopleList.Select(i => new { UserName = i.UserName, Email = i.Email }).OrderByDescending(k => k.Email).Distinct().ToList().ForEach(i => Console.WriteLine(i.UserName + i.Email));Console.WriteLine("集合中有一个字段,将这个字段重复的过滤,并输出这个字段");peopleList.Select(i => new { i.UserName }).Distinct().ToList().ForEach(i => Console.WriteLine(i.UserName));#endregion
该扩展方法贴出:
public static class EnumerableExtensions{ public static IEnumerableDistinctBy (this IEnumerable source, Func keySelector) { HashSet hashSet = new HashSet (); foreach (TSource item in source) { if (hashSet.Add(keySelector(item))) { yield return item; } } }}